p1950.pas

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

PAS
62
字号
PROGRAM p1950;

VAR
        ans                     :array[1..16,1..5,1..16]of Extended;
        name                    :array[1..16]of String;
        order                   :array[1..16,1..16]of Extended;

PROCEDURE Readin;
var
        i,j                     :Integer;
begin
if eof then halt;
for i:=1 to 16 do
        begin
        readln(name[i]);
        while length(name[i])<10 do name[i]:=name[i]+' ';
        while length(name[i])>10 do delete(name[i],length(name[i]),1);
        end;
for i:=1 to 16 do
        begin
        for j:=1 to 16 do
                begin
                read(order[i][j]);
                order[i][j]:=order[i][j] / 100;
                end;
        readln;
        end;
end;

PROCEDURE Main;
var
        i,j,k1,k2               :Integer;
begin
fillchar(ans,sizeof(ans),0);
for i:=1 to 16 do ans[i,5,i]:=1;
for i:=4 downto 1 do
        begin
        for j:=1 to trunc(exp(ln(2)*(i-1))) do
                begin
                for k1:=1 to 16 do
                        for k2:=1 to 16 do
                                if (k1<>k2) then
                                begin
                                ans[k1][i][j]:=ans[k1][i][j]+ans[k1][i+1][2*j]*ans[k2][i+1][2*j-1]*order[k1][k2]
                                        +ans[k2][i+1][2*j]*ans[k1][i+1][2*j-1]*order[k1][k2];
                                end;
                end;
        end;
for i:=1 to 16 do
        writeln(name[i],' ','p=',ans[i][1][1]*100:0:2,'%');
end;

BEGIN
//assign(input,'p.in');
//reset(input);
while true do
        begin
        readIn;
        Main;
        end;
END.

⌨️ 快捷键说明

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