洛谷1223排隊接水
阿新 • • 發佈:2019-02-06
題目
有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.