7.16第一题“竞赛排名”

Description 7.16第一题“竞赛排名”
文章图片

Input 输入文件为compe.in。文件的第一行为参赛总人数N(1<=N<=100),从第二行到第N行依次为编号1到编号N的选手的成绩,每行有8个0~100之间的整数,代表该选手的8项竞赛成绩xi1,xi2,。。。,xi8。同一行相邻两个数之间用一个空格符隔开。 Output 输出文件为compe.out。文件有N行,从第


一行到第N行依次为排名第1的选手的编号,排名第2的选手的编号……排名第N的选手的编号。

题解

直接模拟,注意n<=1000。
var i,j,n,k:longint; sum,avg,x,y:array[0..1000]of double; f,p:array[0..1000,0..8]of double; a:array[0..1000]of integer; tot,l:real; begin assign(input,'compe.in'); reset(input); read(n); for i:=1to n do begin a[i]:=i; for j:=1to 8do begin read(f[i,j]); sum[i]:=sum[i]+f[i,j]; avg[j]:=avg[j]+f[i,j]; end; end; for j:=1to 8do avg[j]:=avg[j]/n; for i:=1to n do for j:=1to 8 do begintot:=0; for k:=n downto 1do tot:=tot+abs(f[k,j]-avg[j]); if tot<>0then p[i,j]:=(f[i,j]-avg[j])/tot*n; end; for i:=1to n do begin for j:=1to 3do y[i]:=y[i]+p[i,j]; for j:=4to 8do y[i]:=y[i]+0.8*p[i,j]; end; for i:=1to n-1 do for j:=i+1 to n do begin if(y[i]



    推荐阅读