码迷,mamicode.com
首页 > 其他好文 > 详细

2017/10/6 x中培训-------谁是组长

时间:2017-10-06 19:38:52      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:stdout   结果   暴力   bsp   des   i++   span   ios   keyword   

谁是组长 (来自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中培训-------谁是组长

标签:stdout   结果   暴力   bsp   des   i++   span   ios   keyword   

原文地址:http://www.cnblogs.com/sanqiz/p/7632018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!