谁是组长

来源:互联网 发布:机器人算法有哪些 编辑:程序博客网 时间:2024/05/01 10:42

Description

SSL中学信息组需要选一个组长。信息组一共有n个人,分别用1到n编号,其中m个人参与了投票。得票数过半(票数大于m div 2)的人将被选为组长。
输入数据将告知这m个人分别将票投给了谁,请统计出谁将担任SSL中学信息组的组长。

Input

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

Output

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

Sample Input

7 47 7 2 7

Sample Output

7

Hint

数据规模
1<=n<=maxlongint
1<=m<=10000 


程序如下:

var

  a:array[0..10000] of longint;
  m,n,i,j:longint;
procedure qsort(l,r:longint);  //快排
var
  k:longint;
begin
  if l>=r then exit;
  i:=l; j:=r;
  k:=a[(i+j) div 2];
  repeat
    while a[i]<k do inc(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; j:=1;
  while i<=n do
  begin
    while (a[j+1]=a[i])and(j<=n) do inc(j);
    if (j-i)>=(n div 2) then begin write(a[i],' '); exit; end;
    i:=j+1; j:=i;
  end;
  writeln(-1);
end.
1 0