• SSL JudgeOnline 1868——谁是组长


    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


    首先,我们可以用快排将选择的人从小到大排序(便于对后面的搜索,如果直接用数组可能会爆)。

    然后我们将这些数据,逐个找他的票数(因为前面已经排序过,所以数据都在一起,只要加几个判断即可)

    如找到票数过半就直接输出,退出程序。


    代码如下:

    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]<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;
      f:=true;
      while i<=n do
        begin
          j:=i;
          while (a[j+1]=a[i])and(j<=n) do inc(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.
  • 相关阅读:
    清除浮动的原理剖析
    修正IE6不支持position:fixed的bug(转)
    Callbacks vs Events
    垂直属性
    jQuery的事件模型
    Dean-Edward的事件系统实现
    简单的导航栏实现
    弹窗层效果的实现(非jQuery实现)
    rmdir
    mkdir
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412464.html
Copyright © 2020-2023  润新知