p1579.pas

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

PAS
89
字号
PROGRAM p1579;

VAR
        n,i,temp                        :Longint;
        data                            :array[1..100000]of int64;

PROCEDURE Swap(var a,b:Int64);
var
        temp                            :Int64;
begin
temp:=a;
a:=b;
b:=temp;
end;

FUNCTION Partition(left,right:Longint;key:Int64):Longint;
var
        i,j                             :Longint;
begin
i:=left-1;
j:=right+1;
while true do
        begin
        repeat j:=j-1 until data[j]<=key;
        repeat i:=i+1 until data[i]>=key;
        if i<j then swap(data[i],data[j])
                else
                begin
                Partition:=j;
                exit;
                end;
        end;
end;

PROCEDURE Qsort(left,right:Longint);
var
        q                               :Longint;
begin
if left<right then
        begin
        q:=Partition(left,right,data[left]);
        Qsort(left,q);
        Qsort(q+1,right);
        end;
end;

PROCEDURE Main;

var

        ans,a1,a2                                 :Int64;
begin
ans:=0;
while n>=4 do
        begin
        a1:=data[2]+data[2]+data[1]+data[n];
        a2:=data[n-1]+data[n]+data[1]+data[1];
        if a1<a2 then inc(ans,a1) else inc(ans,a2);
        dec(n,2);
        end;
if n<=2 then
        inc(ans,data[n]);
if n=3 then
        inc(ans,data[1] + data[2] + data[3]);
writeln(ans);
end;

BEGIN
//assign(input,'p.in');
//reset(input);
while not eof do
        begin
        readln(n);
        for I:=1 to n do
                begin
                read(temp);
                data[i]:=temp;
                end;
        readln;
        if n=0 then
                begin
                writeln(0);
                continue;
                end;
        Qsort(1,n);
        Main;
        end;
END.

⌨️ 快捷键说明

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