码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj P2456

时间:2017-12-02 21:08:27      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:++   str   can   scan   c++   color   nbsp   说明   数列   

这道题难就难在空间限制上,只给了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;
}

 

bzoj P2456

标签:++   str   can   scan   c++   color   nbsp   说明   数列   

原文地址:http://www.cnblogs.com/heqingyu/p/7955398.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!