BZOJ 2456 Mode

【題意概述】ide

  給你一個n個數的數列,其中某個數出現了超過n div 2次即衆數,請你找出那個數。spa

【題解】3d

  看起來很水。。然而內存限制只有1Mcode

  因此要用一點小技巧blog

  由於衆數出現的次數超過n/2,因此咱們能夠把每一個數和不同的數抵消,最後剩下的數必定就是衆數內存

  咱們用cnt記錄目前的衆數出現的次數,當目前的衆數與讀入的數不同時,將它們抵消;即cnt--;同樣時cnt++get

  當cnt=0時咱們把當前的數看做衆數it

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,x,cnt,now;
 5 void read(int &k){
 6     k=0; int f=1; char c=getchar();
 7     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
 8     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
 9     k*=f;
10 }
11 int main(){
12     read(n);
13     while(n--){
14         read(x);
15         if(cnt==0) now=x;
16         cnt+=x==now?1:-1;
17     }
18     return printf("%d\n",now),0;
19 }
View Code
相關文章
相關標籤/搜索