当前位置: 代码迷 >> 综合 >> P1093 奖学金
  详细解决方案

P1093 奖学金

热度:55   发布时间:2023-10-09 11:10:02.0

题目描述

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

样例输入

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出

6 265
4 264
3 258
2 244
1 237

思路

O(5n)
按题意排序,只需要保留前五名。
vari,j,k,l,m,n,z:longint;a,b,c:array[1..5] of longint;
beginreadln(l);for i:=1 to l dobeginreadln(m,n,z);z:=z+n+m;k:=6;for j:=1 to 5 doif z>=a[k-1] thenif z=a[k-1] thenbeginif m>c[k-1] then dec(k)elseif (m=c[k-1])and(i<b[k-1])or(b[k-1]=0) thendec(k);endelse dec(k);if k<=5 thenbeginfor j:=5 downto k+1 dobegina[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 dowriteln(b[i],' ',a[i]);
end.