首页 > 其他 > 详细

bzoj P2456

时间:2017-12-02 20:41:44      阅读:217      评论:0      收藏:0      [点我收藏+]

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!