ex.dpr

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

DPR
99
字号
program Ural_1282(Input, Output);
const
    MaxN = 1000;
type
    TIndex = Integer;
    TNodeItem = record
        Children: TIndex;
        Father: TIndex;
        Value: TIndex;
        Level: TIndex;
        Status: Byte; {0:Node;1:Leaf;2:Used}
    end;
    TNode = array[1..MaxN] of TNodeItem;
var
    Tree: TNode;
    N: TIndex;

procedure Init;
var
    i: TIndex;
    Ch: Char;
begin
    FillChar(Tree, SizeOf(Tree), 0);
    Readln(N);
    Tree[1].Father := 0;
    Tree[1].Level := 1;
    Tree[1].Status := 0;
    Tree[1].Children := 0;
    Tree[1].Value := -1;
    for i := 2 to N do
    begin
        Read(Ch);
        if Ch = 'N' then
        begin
            Readln(Tree[i].Father);
            Inc(Tree[Tree[i].Father].Children);
            Tree[i].Level := Tree[Tree[i].Father].Level + 1;
            Tree[i].Children := 0;
            Tree[i].Status := 0;
            if Odd(Tree[i].Level) then
                Tree[i].Value := -1
            else
                Tree[i].Value := 1;
        end;
        if Ch = 'L' then
        begin
            Readln(Tree[i].Father, Tree[i].Value);
            Inc(Tree[Tree[i].Father].Children);
            Tree[i].Level := Tree[Tree[i].Father].Level + 1;
            Tree[i].Children := 0;
            Tree[i].Status := 1;
        end;
    end;
end;

procedure Main;
var
    i, M: TIndex;
begin
    M := N;
    while M > 1 do
    begin
        for i := 1 to N do
            if Tree[i].Status = 1 then
            begin
                if Odd(Tree[i].Level) then
                begin
                    if Tree[i].Value = -1 then
                        Tree[Tree[i].Father].Value := -1
                    else if (Tree[i].Value = 0) and (Tree[Tree[i].Father].Value <> -1) then
                        Tree[Tree[i].Father].Value := 0;
                end
                else
                begin
                    if Tree[i].Value = 1 then
                        Tree[Tree[i].Father].Value := 1
                    else if (Tree[i].Value = 0) and (Tree[Tree[i].Father].Value <> 1) then
                        Tree[Tree[i].Father].Value := 0;
                end;
                Dec(Tree[Tree[i].Father].Children);
                Dec(M);
                Tree[i].Status := 2;
            end;
        for i := 1 to N do
            if (Tree[i].Status = 0) and (Tree[i].Children = 0) then
                Tree[i].Status := 1;
    end;
    case Tree[1].Value of
        1: Writeln('+1');
        0: Writeln('0');
        -1: Writeln('-1');
    end;
end;
begin
    Init;
    Main;
end.

⌨️ 快捷键说明

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