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