队长
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 187 测试通过 : 44
总提交 : 187 测试通过 : 44
比赛描述
南邮ACM 2010-2011年度校级代表队需要选一个队长。代表队一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过半(票数大于m div 2)的人将被选为队长。
输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任南邮ACM 2010-2011年度校级代表队队长。
输入
第一行两个数n和m。
第二行有m个数,这些数都是不超过n的正整数,表明这m个人的选择。1<=n<=maxlongint,1<=m<=10000。
输出
输出将被选为队长的人。如果没有人的票数过半,请输出-1。
样例输入
7 4
7 7 2 7
样例输出
7
题目来源
NUPT ACM 2010 Personal Ranking Contest
#include<iostream>
#include<map>
using namespace std;
int main(){
long long n;
int m,i;
map<long long,int> iiMap;
map<long long, int>::iterator it;
scanf("%I64d%d",&n,&m);
for(i=0; i<m; i++){
scanf("%I64d",&n);
iiMap[n]++;
}
for(it=iiMap.begin(); it!=iiMap.end(); ++it){
if(2*it->second > m){
break;
}
}
if(it!=iiMap.end()){
printf("%I64d\n",it->first);
}else{
printf("-1\n");
}
}
/*Wrong Answer at Test 8
#include<stdio.h>
long long a[10000];
int main(){
long long n,r;
int m,i,count=0;
scanf("%I64d%d",&n,&m);
for(i=0;i<m;i++){
scanf("%I64d",a+i);
if(0==count){
r = a[i];
}else{
if(a[i] == r){
count++;
}else{
count--;
}
}
}
count = 0;
for(i=0; i<m; i++){
if(a[i]==r){
count++;
}
}
if(count*2 > m){
printf("%I64d\n",r);
}else{
printf("-1");
}
}
*/