⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1185.pas

📁 同济大学 Online在线题库 AC源代码合集 程序设计竞赛必看资料
💻 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 + -