BZOJ2456

BZOJ2456: mode

Time Limit: 1 Sec Memory Limit: 1 MB

Description

给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。

Input

第1行一个正整数n。
第2行n个正整数用空格隔开。

Output

一行一个正整数表示那个众数。

Sample Input

5
3 2 3 1 3

Sample Output

3

HINT

100%的数据,n<=500000,数列中每个数<=maxlongint。

题目解析:

这道题目特别坑,只给了1MB的空间意味着不能开数组,不过正解很巧妙,用一个数去抵消另一个数,最后剩下的就是答案,但是这道题目不能用C++的头文件和命名空间,否则会爆内存.我就是没这个卡掉的,而且用int居然也能过.

代码如下:

#include <cstdio>

int n,tot,last,now;

int main(){
	scanf("%d",&n);
	for(int i = 1;i <= n; i++){
		scanf("%d",&now);
		if(last == now)tot++;
		else if(!tot)last = now,tot = 1;
		else tot--;
	}
	printf("%d\n",last);
	return 0;
}
posted @ 2017-08-14 17:23  Frade~  阅读(94)  评论(0编辑  收藏  举报