1. 程式人生 > >洛谷1223排隊接水

洛谷1223排隊接水

題目

有n個人在一個水龍頭前排隊接水,假如每個人接水的時間為Ti,請程式設計找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。

題解

先排序,然後計算總等待時間,最後輸出順序和平均等待時間。

程式碼

var
  n,i,j,k:longint;
  a,b:array[1..1000]of longint;
  sum:real;

procedure qsort(l,r:longint);
var
  i,j,key,t,c:longint;
begin
  if l>=r then exit;
  i:=l; j:=r;
  c:=l+random(r-l+1
); key:=a[c]; repeat while (a[i]<key) do inc(i); while (a[j]>key) do dec(j); if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t; t:=b[i];b[i]:=b[j];b[j]:=t; inc(i);dec(j); end; until i>j; qsort(l,j); qsort(i,r); end; begin readln(n); for i:=1
to n do begin read(a[i]); b[i]:=i; end; randomize; qsort(1,n); k:=n; for i:=1 to n do begin write(b[i],' '); dec(k); sum:=sum+a[i]*k; end; writeln; writeln(sum/n:0:2); end.