luogu P2397 yyy loves Maths VI (mode)
阿新 • • 發佈:2018-04-15
spa -s 標準 lag 背景 badge 時間限制 個人 IT
題目背景
自動上次redbag用加法好好的刁難過了yyy同學以後,yyy十分憤怒.他還擊給了redbag一題,但是這題他驚訝的發現自己居然也不會,所以只好找你
題目描述
[h1]udp2:第一題因為語言性質問題,比賽結束後將所有c/c++的程序的內存調為2.2mb後重測。[/h1]
他讓redbag找眾數
他還特意表示,這個眾數出現次數超過了一半
一共n個數,而且保證有
n<=2000000
而且每個數<2^31-1
輸入輸出格式
輸入格式:
第一行一個整數n
第二行n個整數
輸出格式:
一行,這個眾數
輸入輸出樣例
輸入樣例#1:5
2 3 3 3 3
輸出樣例#1: 3
說明
時間限制 1s
空間限制 3.5M(你沒看錯3.5M)
有人想水過,但我告訴你這空間是不夠的
//kkksc03偷偷地說:你隨便輸出一個數字吧,都有1/2的幾率。不過這可是樂多賽,值得不值得你看著辦。所以最好想一想正解。
數學題?求重數?這不太簡單了。
可是這空間為啥只給3.5M啊,這咋寫?
(自擬)看了這個題後:
IQ 25的YYF怯怯說:拿個數組把出現的記錄下來,看看哪個數出現次數最多。
IQ 120的WLZ無力說:排一下序,既然重數超過一半,那麽中間的位置一定是重數。
IQ 250的LXL欣然的說:這還不簡單以第一個數為標準,第一個數出現次數為1,下一個數若與這個數相同,則這個數的次數+1,若不相同則-1,若做標準的數次數為零,則下個數將這個替換掉,因為重數出現次數超過了一半,所以最後剩下的那個標準數,只能是重數。
WLZ的代碼:
#include<bits/stdc++.h> using namespace std; int a[2000001],n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+1+n); cout<<a[n/2]; }
LXL的代碼:
#include<bits/stdc++.h> using namespace std; int n,flag,x,cnt,now;int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); if(cnt==0)now=x,cnt++; else { if(now==x) { cnt++; } else cnt--; } } printf("%d",now); }
此為個人略解,轉載請標明出處:http://www.cnblogs.com/rmy020718/p/8835352.html
luogu P2397 yyy loves Maths VI (mode)