P1093 奖学金

来源:互联网 发布:人口会拖垮印度吗 知乎 编辑:程序博客网 时间:2024/04/30 14:13

题目描述

先按每个学生总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面。依次表示前5名学生的学号和总分。

样例输入

690 67 8087 66 9178 89 9188 99 7767 89 6478 89 98

样例输出

6 2654 2643 2582 2441 237

思路

O(5n)按题意排序,只需要保留前五名。
var  i,j,k,l,m,n,z:longint;  a,b,c:array[1..5] of longint;begin  readln(l);  for i:=1 to l do    begin      readln(m,n,z);      z:=z+n+m;      k:=6;      for j:=1 to 5 do        if z>=a[k-1] then          if z=a[k-1] then            begin              if m>c[k-1] then dec(k)              else                if (m=c[k-1])and(i<b[k-1])or(b[k-1]=0) then                  dec(k);            end          else dec(k);      if k<=5 then        begin          for j:=5 downto k+1 do            begin              a[j]:=a[j-1];              b[j]:=b[j-1];              c[j]:=c[j-1];            end;          a[k]:=z;          b[k]:=i;          c[k]:=m;        end;    end;  for i:=1 to 5 do    writeln(b[i],' ',a[i]);end.
0 0
原创粉丝点击