题意
把总分排序
分析
先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学
排在前面
var
a,t,p:array[0..300]of longint;
n,i,x,y,j:longint;
procedure kp(l,r:longint);
var
i,j,mid:longint;
begin
if l>=r then exit;
i:=l;j:=r;mid:=t[(l+r) div 2];
repeat
while t[i]>mid do inc(i);
while t[j]<mid do dec(j);
if (t[i]<t[j])or(t[i]=t[j])and(a[i]<a[j])or(t[i]=t[j])and(a[i]>a[j])and(p[i]>p[j]) then
begin
a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
t[0]:=t[i];t[i]:=t[j];t[j]:=t[0];
p[0]:=p[i];p[i]:=p[j];p[j]:=p[0];
inc(i);dec(j);
end;
until(i>j);
kp(l,j);
kp(i,r);
end;
begin
readln(n);
for i:=1 to n do
begin
readln(a[i],x,y);
t[i]:=a[i]+x+y;
p[i]:=i;
end;
//kp(1,n);
for i:=1 to n-1 do
begin
for j:=i+1 to n do
if (t[i]<t[j])or(t[i]=t[j])and(a[i]<a[j])or(t[i]=t[j])and(a[i]>a[j])and(p[i]>p[j]) then
begin
a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
t[0]:=t[i];t[i]:=t[j];t[j]:=t[0];
p[0]:=p[i];p[i]:=p[j];p[j]:=p[0];
end;
end;
for i:=1 to 5 do
writeln(p[i],' ',t[i]);
end.