【bzoj2456】 mode
http://www.lydsy.com/JudgeOnline/problem.php?id=2456 (题目链接)
只看了一眼,直觉便告诉我这是水题。于是跟某码农打赌说10分钟做出来叫爸爸,结果输了。。。
题意
给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。空间限制1mb。
solution
此题乃鬼题一道,鉴定完毕。
题目要求求众数,而众数x在整个数列中出现了超过n div 2次,那么我们可以发现,整个数列中众数x的个数一定超过n div 2次,也就是说众数的个数减去不是众数的数的个数>0。
做法有点鬼,不过很好理解,只有3个变量。。(恐惧吧)
细节
为了保证各位小伙伴一次ak,请只开cstdio库,能不开变量就不开变量,因为这些都是要空间的。。。
代码
// bzoj2456 #include<cstdio> #define LL long long #define inf 2147483640 #define Pi acos(-1.0) #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); using namespace std; int main() { int n; scanf("%d",&n); int x=0,y=1,c; for (int i=1;i<=n;i++) { scanf("%d",&c); if (c==x) y++; else y--; if (y<=1) x=c,y=1; } printf("%d",x); return 0; }
This passage is made by MashiroSky.