单点时限: 3.0 sec
内存限制: 64 MB
Steve和Alex每天都在为午饭吃什么而发愁,因为吃的东西实在是太多了,而且很多都特别好吃。为了解决吃什么的问题,Alex决定每次吃饭前发布一个问卷调查,让他的好朋友选出他们今天最想吃的食物,然后Alex会根据问卷的结果来确定吃什么
每个问卷只收集一种食物,每个食物都由一个数字num来表示。Alex会选出问卷中出现次数超过问卷总数一半的数字来决定今天的午饭
输入格式
单组输入,每组两行
第一行有一个整数N (1≤N≤2×107)
第二行有N个整数num (num≤1018),代表每个问卷中的数字
输出格式
输出一个整数,即出现次数超过N2的数
样例
input
4
1 1 1 2
output
1
input
5
2 2 3 3 3
output
3
提示
保证每组数据一定存在符合条件的数
请注意题目上的内存限制
题解:
算法:摩尔投票法
此题是摩尔投票法的的经典例题。
摩尔投票法看大佬博客吧https://www.cnblogs.com/Friends-A/p/11368412.html
#include <iostream>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
typedef long long ll;
int main()
{
// freopen("input.txt","r",stdin);
std::ios::sync_with_stdio(false);
ll n;
cin>>n;
ll x;
ll house=0;
ll sum=0;
for(ll i=0;i<n;i++)
{
cin>>x;
if(!sum) house=x;
if(house==x) sum++;
if(house!=x) sum--;
}
cout<<house<<endl;
return 0;
}