传送门:bzoj2456
题解
内存不够,智商来凑?
1MB意味着不能开数组排序。
注意是 > ⌊ n 2 ⌋ >\lfloor \frac n2\rfloor >⌊2n⌋的才算是众数!
于是产生了一个神奇算法:
把每个数和前一个与它不同的数相抵消,由于要求的数出现了超过 ⌊ n 2 ⌋ \lfloor \frac n2\rfloor ⌊2n⌋次,不会被抵消完,那么最后剩下的就是答案。
注意刚好 n 2 \frac n2 2n的数可能不会被选中,如:
4
1 2 3 2
答案是 3
代码
#include<cstdio>
int n,t,x,tot;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==t)tot++;
else if(!tot)
{t=x;tot=1;}
else tot--;
}
printf("%d",t);
return 0;
}