您的位置:首页 > 其它

谁是组长

2016-04-08 21:46 246 查看
Description

SSL中学信息组需要选一个组长。信息组一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过半(票数大于m div
2)的人将被选为组长。

输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任SSL中学信息组的组长。

Input

第一行两个数n和m。

第二行有m个数,这些数都是不超过n的正整数,表明这m个人的选择。

Output

输出将被选为组长的人。如果没有人的票数过半,请输出-1。

Sample Input

7 4

7 7 2 7


Sample Output

7


Hint

数据规模

1<=n<=maxlongint

1<=m<=10000

解题报告:先读入数据,用快排进行排序,然后进行统计,并用一个布尔型变量判断是否有人的票数过半,若有则输出是第几个人,若无则输出-1。

程序:
var

a:array[0..10000] of longint;

m,n,i,j:longint;

f:boolean;

procedure qsort(l,r:longint);

var

i,j,k:longint;

begin

if l>=r then exit;

i:=l;

j:=r;

k:=a[(i+j) div 2];

repeat

while
a[i]

while
a[j]>k do dec(j);

if
i<=j then

begin

a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];

inc(i);dec(j);

end;

until i>j;

qsort(i,r);

qsort(l,j);

end;

begin

readln(m,n);

for i:=1 to n do

read(a[i]);

qsort(1,n);

i:=1;

f:=true;

while i<=n do

begin

j:=i;

while
(a[j+1]=a[i])and(j

if
j-i+1>n div 2 then

begin

write(a[i],' ');

f:=false;

end;

i:=j+1;

end;

if f then writeln(-1);

end.

版权属于: Chris

原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v11l.html

转载时必须以链接形式注明原始出处及本声明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: