[ 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;
}

posted @ 2018-09-09 17:41  SGCollin  阅读(127)  评论(0编辑  收藏  举报