[ BZOJ 2456 ] Mode
\(\\\)
\(Description\)
一个长度为\(N\)的数列,求其众数。
- \(N\in [1,5\times 10^5]\),数字大小\(\le maxlongint\),空间限制\(1MB\)
\(\\\)
\(Solution\)
我是智障您们都太神了
-
空间大点离散化或者\(map\)就水过去了
-
注意到众数出现次数\(> \frac{N}{2}\),于是神仙做法是令不同的数字互相抵消,那么最后剩下的数一定是众数,按顺序读进来开个计数器就行了。
涨姿势原来调用像iostram的一些头文件还需要空间
\(\\\)
\(Code\)
#include<cstdio>
using namespace std;
int main(){
int n,m,now,cnt;
scanf("%d",&n);
while(n--){
scanf("%d",&m);
(m==now)?++cnt:--cnt;
if(cnt<=0) cnt=1,now=m;
}
printf("%d\n",now);
return 0;
}