ex.dpr

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

DPR
111
字号
{$N+}
program Ural_1306(Input, Output);
//19:05  19:30
const
    MaxN = 250000;
    Buffer = 3; // Even N(+2)+Current Extended(+1)
type
    TIndex = Longint;
    TData = Longword;
    TQueue = array[1..MaxN div 2 + Buffer] of TData;
var
    N: TIndex;
    Q: TQueue;
    Len: TIndex;

procedure DeleteMax;
var
    i, j: TIndex;
    tmp: TData;
begin
    tmp := Q[Len]; // Q[1]=Q[Len]
    Dec(Len);
    i := 1;
    while i * 2 <= Len do
    begin
        j := i * 2;
        if (j + 1 <= Len) and (Q[j] < Q[j + 1]) then Inc(j);
        if Q[j] > tmp then
        begin
            Q[i] := Q[j];
            i := j;
        end
        else
            Break;
    end;
    Q[i] := tmp;
end;

procedure Insert(Value: TData);
var
    i: TIndex;
    tmp: TData;
begin
    Inc(Len);
    tmp := Value; //    D[Len] = Value
    i := Len;
    while i > 1 do
    begin
        if tmp > Q[i div 2] then
        begin
            Q[i] := Q[i div 2];
            i := i div 2;
        end
        else
            Break;
    end;
    Q[i] := tmp;
end;

procedure Maximum(var Value: TData);
begin
    Value := Q[1];
end;

procedure Main;
var
    Value, Value_: TData;
    i: TIndex;
    Sum: Extended; //Overflow  WA 1 times
begin
    FillChar(Q, SizeOf(Q), 0);
    Len := 0;
    Readln(N);
    for i := 1 to N div 2 + 1 do
    begin
        Readln(Value);
        Insert(Value);
    end;
    for i := N div 2 + 2 to N do
    begin
        Readln(Value);
        Insert(Value);
        DeleteMax;
    end;
    if Odd(N) then
    begin
        Maximum(Value);
        Sum := Value;
        Writeln(Sum: 0: 1);
    end
    else
    begin
        Maximum(Value);
        Sum := Value;
        DeleteMax;
        Maximum(Value_);
        Sum := Sum + Value_;
        Writeln(Sum / 2: 0: 1);
    end;
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 + -
显示快捷键?