p1543.dpr

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· DPR 代码 · 共 77 行

DPR
77
字号
program p1543;

{$APPTYPE CONSOLE}

var
        n       :integer;
        m       :array[1..100]of real;
        i       :Integer;

PROCEDURE change(a,b:integer);
var
        temp    :real;
begin
temp:=m[a];
m[a]:=m[b];
m[b]:=temp;
end;

PROCEDURE fly(p:integer);
var
        point   :integer;
begin
if 2*p>n then exit;
if (2*p+1<=n)and(m[2*p+1]>m[2*p]) then point:=2*p+1 else point:=2*p;
if m[point]>m[p] then
        begin
        change(p,point);
        fly(point);
        end;
end;

PROCEDURE make(p:integer);
var
        point   :Integer;
begin
if 2*p>n then exit;
if m[2*p]>m[p] then  point:=2*p else point:=p;
if (2*p+1<=n)and(m[2*p+1]>m[point]) then point:=2*p+1;
if point<>p then
        begin
        change(p,point);
        make(point);
        end;
end;

PROCEDURE main;
var
        i,j     :integer;
        min1    :real;
        min2    :real;
        copy    :integer;
begin
for I:=n div 2 downto 1 do make(i);
copy:=n;
for i:=1 to copy-1 do
        begin
        min1:=m[1];
        change(1,n);
        dec(n);
        make(1);
        min2:=m[1];
        m[1]:=2*sqrt(min1*min2);
        fly(1);
        end;
writeln(m[1]:0:3);
end;

begin
while not eof do
        begin
        readln(n);
        for I:=1 to n do
                readln(m[i]);
        main;
        end;
end.
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?