BZOJ2456 mode

  这个东西似乎叫摩尔投票法。注意到这里众数的出现次数大于其他数的出现次数之和。考虑cnt表示当前所找到的众数比其他数出现次数多多少,每次更新如果cnt<0就把众数选做当前数。正确性感性理解一下,不妨把非众数的数看成同一种数,这样的话正确性显然,现在非众数的数可能不一样那就更对了。

#include<cstdio>
int n,x,cnt,ans;
int main()
{
#ifndef ONLINE_JUDGE
    freopen("bzoj2456.in","r",stdin);
    freopen("bzoj2456.out","w",stdout);
    const char LL[]="%I64d\n";
#else
    const char LL[]="%lld\n";
#endif
    scanf("%d",&n);
    while (n--)
    {
        scanf("%d",&x);
        if (x==ans) cnt++;
        else 
        {
            cnt--;
            if (cnt<0) cnt=1,ans=x;
        }
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2018-08-31 13:29  Gloid  阅读(144)  评论(0编辑  收藏  举报