输入文件为compe.in。文件的第一行为参赛总人数N(1<=N<=100),从第二行到第N行依次为编号1到编号N的选手的成绩,每行有8个0~100之间的整数,代表该选手的8项竞赛成绩xi1,xi2,。。。,xi8。同一行相邻两个数之间用一个空格符隔开。
Output
输出文件为compe.out。文件有N行,从第一行到第N行依次为排名第1的选手的编号,排名第2的选手的编号,。。。,排名第N的选手的编号。
SampleInput
3
72 8273 68 95 86 82 90
72 9050 60 80 70 65 80
72 8273 68 95 86 82 90
SampleOutput
1
3
2
直接用上面的公式计算。一开始直接WA了,还0分。后来才知道,快排不稳定啊,就说为什么反过来。又把一个4打错成了1,下面可以看到的,真是不爽。顺便吐槽一下,叶文韬又用不正当手段AK了。我F8了半个小时才A了。
var
a:Array [1..1000,1..8] of longint;
avg,sumy:Array[1..1000] of real;
y:Array [1..1000,1..8] of real;
sum,h:Array [1..1000] of longint;
n,i,j,k,t:longint;
num:real;
begin
readln(n);
for i:=1 to n do
for j:=1 to 8 do
read(a[i,j]);
for i:=1 to 8 do
begin
for j:=1 to n do
avg[i]:=avg[i]+a[j,i];
avg[i]:=avg[i]/n;
end;
fori:=1 to n do
begin
for j:=1 to 8 do
sum[i]:=sum[i]+a[i,j];
h[i]:=i;
end;
fori:=1 to n do
for j:=1 to 8 do
begin
num:=0;
for k:=1 to n do
num:=num+abs(a[k,j]-avg[j]);
if num=0 then y[i,j]:=0
else y[i,j]:=(a[i,j]-avg[j])*n/num;
end;
for i:=1 to n do
begin
for k:=1 to 3 do
sumy[i]:=sumy[i]+y[i,k];
for k:=4 to 8 do
sumy[i]:=sumy[i]+y[i,k]*0.8;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if (sumy[i]<sumy[j]) or (sumy[i]=sumy[j]) and(sum[i]<sum[j]) or
(sumy[i]=sumy[j]) and(sum[i]=sum[j]) and (h[i]>h[j]) then
begin
num:=sumy[i];sumy[i]:=sumy[j];sumy[j]:=num;
t:=sum[i]; sum[i]:=sum[j]; sum[j]:=t;
t:=h[i]; h[i]:=h[j]; h[j]:=t;
end;
end;
for i:=1 to n do
writeln(h[i]);
end.