排队接水pascal程序

题意

找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。


分析

打水的时候花费时间越少的人越先打,那么所有人的等待时间之和就会最小,所以我们要先排序,再计算总时间


var
a,b:array[0..50000]of longint;
n,i,j,w:longint;
tj:real;
begin
    readln(n);
    for i:=1 to n do
    begin
        read(a[i]);
        b[i]:=i;
    end;


    for i:=1 to n-1 do
    begin
        for j:=i+1 to n do
        if a[i]>a[j] then
        begin
            a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
            b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];
        end;
    end;
    tj:=0;
    for i:=1 to n do
    write(b[i],' ');
    writeln;
    w:=0;
    for i:=n-1 downto 0 do
    begin
        inc(w);
        tj:=tj+a[w]*i;
    end;
    write((tj/n):0:2);
end.

posted @ 2017-01-13 21:15  银叶草  阅读(137)  评论(0编辑  收藏  举报
Live2D