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; }