p1909.pas
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 94 行
PAS
94 行
PROGRAM p1909;
VAR
part :Integer;
long :array[1..20]of Longint;
chose :array[1..20]of Boolean;
avg,statu,n :Longint;
PROCEDURE Sort;
var
i,j,temp :Longint;
begin
fillchar(chose,sizeof(chose),0);
for i:=1 to n-1 do
for j:=i+1 to n do
if long[i]<long[j] then
begin
temp:=long[i];
long[i]:=long[j];
long[j]:=temp;
end;
end;
PROCEDURE Readin;
var
i :Integer;
begin
read(n);
avg:=0;
statu:=0;
for I:=1 to n do
begin
read(long[i]);
inc(avg,long[i]);
end;
readln;
if avg mod 4<>0 then Statu:=2 else Sort;
avg:=avg div 4;
if long[n]>avg then statu:=2;
end;
PROCEDURE Search(reach,sum,dep,fill:Longint);
var
i :Integer;
begin
if (dep=n)and(fill=4) then
begin
statu:=1;
exit;
end;
if sum=0 then
begin
for i:=1 to n do
if not chose[i] then break;
chose[i]:=true;
if long[i]=avg then Search(1,0,dep+1,fill+1)
else Search(i+1,long[i],dep+1,fill);
chose[i]:=false;
end else
begin
for i:=reach to n do
begin
if statu>0 then exit;
if not chose[i] and (sum+long[i]<=avg) then
begin
if sum+long[i]=avg then
begin
chose[i]:=true;
Search(1,0,dep+1,fill+1);
chose[i]:=false;
break;
end else
begin
chose[i]:=true;
Search(i+1,sum+long[i],dep+1,fill);
chose[i]:=false;
end;
end;
end;
end;
end;
BEGIN
//assign(input,'p.in');
//reset(input);
readln(part);
for part:=part downto 1 do
begin
Readin;
if statu=0 then Search(1,0,0,0);
if statu=1 then writeln('yes') else writeln('no');
end;
END.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?