谁是组长

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

转载时必须以链接形式注明原始出处及本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值