bzoj P2456

这道题难就难在空间限制上,只给了1MB,导致无法用数组来储存

但是,经过探寻规律发现,这道题其实是有很简单的方法的

XX定理:

当一个数列中的众数出现次数大于n/2时,将两个不相同的数同时抹掉,这个结论仍然成立

因此,每次统计次数,当出现不一样的数就抵消,次数等于0是就说明抵消完了,换一个数继续,直到结束,就可以求出答案

#include<bits/stdc++.h>
int n,ans,cnt,x;
int main(){
    scanf("%d%d",&n,&ans);
    cnt=1;
    while(--n){
        scanf("%d",&x);
        if(x==ans) cnt++;
        else cnt--;
        if(!cnt) ans=x,cnt=1; 
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2017-12-02 20:05  Accelerator-D-x  阅读(129)  评论(0编辑  收藏  举报