2017/10/6 x中培训-------谁是组长
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017/10/6 x中培训-------谁是组长相关的知识,希望对你有一定的参考价值。
谁是组长 (来自X中的题目)
(File IO): input:leader.in output:leader.out
时间限制: 1000 ms 空间限制: 65536 KB 具体限制
题目描述
x中信息组需要选一个组长。信息组一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过半
(票数大于m div 2)的人将被选为组长。
输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任一中信息组的组长。
输入
第一行两个数n和m。
第二行有m个数,这些数都是不超过n的正整数,表明这m个人的选择。
输出
输出将被选为组长的人。如果没有人的票数过半,请输出-1。
样例输入
7 4
7 7 2 7
样例输出
7
数据范围限制
20%数据满足: n,m<=10
40%数据满足: n<=10,m<=10000
100%数据满足: 1<=n<=maxlongint,1<=m<=10000
PS:注意空间控制。
这题一时只会写暴力,后面又想到伪hash看看测评点水不水,结果数据好水,竟然让我AC了。。。
暴力:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 0xffff
using namespace std;
long int n,y,a[N];
int m;
int main()
{
//freopen("leader.in","r",stdin);
//freopen("leader.out","w",stdout);
int i,j;
cin>>n>>m; y=m/2;
for(i=1;i<=m;i++)
{ scanf("%d",&j); a[j]++;
if(a[j]>y) { cout<<j; return 0;} }
cout<<-1;
return 0;
}
//50分
伪hash:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 233329
using namespace std;
long int n,y=0,a[N+1]={0};
int m;
int main()
{
//freopen("leader.in","r",stdin);
//freopen("leader.out","w",stdout);
int i,j;
cin>>n>>m;
for(i=1;i<=m;i++)
{ scanf("%d",&j);
a[j%233329]++;
if(a[j%233329]>m/2)
y=j;}
if(y==0)
cout<<-1;
else
cout<<y;
return 0;
}
//100分
以上是关于2017/10/6 x中培训-------谁是组长的主要内容,如果未能解决你的问题,请参考以下文章