📄 ac1185.pas
字号:
program tju1185;
const
maxn=1000;
weight:array[1..8]of byte=(5,5,5,4,4,4,4,4);
zero=1e-9;
var
a:array[1..maxn,1..8]of byte;
sum1:array[1..maxn]of real;
sum2,rank:array[1..maxn]of word;
avg,denom:array[1..8]of real;
n,i,j:word;
function lower(a,b:word):boolean;
begin
if sum1[a]+zero<sum1[b] then
lower:=true
else if sum1[a]-zero>sum1[b] then
lower:=false
else if sum2[a]<sum2[b] then
lower:=true
else if sum2[a]>sum2[b] then
lower:=false
else
lower:=a>b;
end;
procedure qsort(s,t:word);
var
p,i,j,tmp:word;
begin
if s>=t then exit;
p:=s+random(t-s+1);
tmp:=rank[p];rank[p]:=rank[s];
i:=s;j:=t;
repeat
while (i<j) and lower(rank[j],tmp) do dec(j);
if i=j then break;rank[i]:=rank[j];inc(i);
while (i<j) and lower(tmp,rank[i]) do inc(i);
if i=j then break;rank[j]:=rank[i];dec(j)
until i=j;
rank[i]:=tmp;
qsort(s,i-1);
qsort(i+1,t);
end;
begin
repeat
fillchar(sum1,sizeof(sum1),0);
fillchar(sum2,sizeof(sum2),0);
fillchar(avg,sizeof(avg),0);
fillchar(denom,sizeof(denom),0);
read(n);
for i:=1 to n do
for j:=1 to 8 do begin
read(a[i,j]);
inc(sum2[i],a[i,j]);
avg[j]:=avg[j]+a[i,j];
end;
for j:=1 to 8 do begin
avg[j]:=avg[j]/n;
for i:=1 to n do
denom[j]:=denom[j]+abs(a[i,j]-avg[j]);
if denom[j]>zero then
for i:=1 to n do
sum1[i]:=sum1[i]+(a[i,j]-avg[j])/denom[j]*weight[j];
end;
for i:=1 to n do
rank[i]:=i;
qsort(1,n);
for i:=1 to n do
writeln(rank[i]);
until seekeof;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -