1. 程式人生 > >$[ BZOJ 2456 ] Mode$

$[ BZOJ 2456 ] Mode$

pan ios mat ref esp turn line math bzoj


\(\\\)

\(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;
}

$[\ BZOJ\ 2456\ ]\ Mode$