ex.dpr

来自「tongji acm-online judge solution」· DPR 代码 · 共 110 行

DPR
110
字号
program Ural_1253(Input, Output);
const
    MaxLen = 1000;
    MaxN = 9;
type
    TIndex = Longint;
    TDString = array[1..MaxLen] of Char;
    TSample = array[1..MaxN] of record
        P: TDString;
        Len: TIndex;
        RealLen: TIndex;
    end;
    TWatch = record
        D: array[1..MaxN + 1] of TIndex;
        Len: TIndex;
    end;
var
    OverLength: Boolean;
    D: TSample;
    N: TIndex;
    W: TWatch;

function DLength(S, k: TIndex): TIndex;
var
    i, Sum: TIndex;
begin
    if OverLength then Exit;
    Inc(W.Len);
    W.D[W.Len] := k;
    for i := 1 to W.Len - 1 do
        if W.D[i] = k then
        begin
            OverLength := true;
            Exit;
        end;
    if S + D[k].RealLen >= 1000000 then OverLength := true;
    Sum := D[k].RealLen;
    with D[k] do
        for i := 1 to Len do
        begin
            if P[i] = '*' then
                Sum := Sum + DLength(Sum + S, Ord(P[i + 1]) - Ord('0'));
            if OverLength then Exit;
        end;
    DLength := Sum;
    Dec(W.Len);
end;

procedure Print(k: TIndex);
var
    i: TIndex;
begin
    with D[k] do
    begin
        i := 0;
        while i < Len do
        begin
            Inc(i);
            if P[i] = '*' then
            begin
                Print(Ord(P[i + 1]) - Ord('0'));
                Inc(i);
            end
            else
                Write(P[i]);
        end;
    end;
end;

procedure Main;
var
    i: TIndex;
    Ch: Char;
begin
    FillChar(D, SizeOf(D), 0);
    FillChar(W, SizeOf(W), 0);
    Readln(N);
    for i := 1 to N do
    begin
        repeat
            Read(Ch);
            if Ch = '#' then Break;
            Inc(D[i].Len);
            D[i].P[D[i].Len] := Ch;
            Inc(D[i].RealLen);
            if Ch = '*' then
                Dec(D[i].RealLen, 2);
        until false;
        Readln;
    end;
    OverLength := false;
    DLength(0, 1); //estimate
    if OverLength then
    begin
        Write('#');
        Exit;
    end;
    Print(1);
end;
begin
   { Assign(Input, 'i.txt');
    Reset(Input);
    Assign(Output, 'o.txt');
    Rewrite(Output); }
    Main;
{    Close(Input);
    Close(Output);  }
end.

⌨️ 快捷键说明

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