比赛 暑假培训二 评测结果 WWWWWWTATT
题目名称 跳棋的挑战 最终得分 10
用户昵称 zpl123 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-07-18 11:48:49
显示代码纯文本
program checker;
var
f1,f2:text;
p,q,n:longint;
xx:array[1..50]of longint;
yy,l,r:array[-50..50]of boolean;

procedure start;
begin
assign(f1,'checker.in');
reset(f1);
assign(f2,'checker.out');
rewrite(f2);
read(f1,n);
p:=0;
fillchar(yy,sizeof(yy),true);
fillchar(l,sizeof(l),true);
fillchar(r,sizeof(r),true);
end;{start}

procedure print;
var
i:longint;
begin
if p<=3 then
 begin
  for i:=1 to n-1 do
  write(f2,xx[i],' ');
  writeln(f2,xx[n]);
 end
end;

procedure search(x:integer);
var
i:longint;
begin
for i:=1 to n do
 if yy[i] and r[x+i] and l[i-x] and (xx[x]=0) then
 begin
 xx[x]:=i;
 yy[i]:=false;
 r[x+i]:=false;
 l[i-x]:=false;
 if x=n then
  begin
  inc(p);
  if p>3 then
  exit;
  print;
  end else search(x+1);
  xx[x]:=0;
  yy[i]:=true;
  r[x+i]:=true;
  l[i-x]:=true;
 end;{if}
end;{search}

procedure search1(x:integer);
var
i:longint;
begin
for i:=1 to n do
 if yy[i] and r[x+i] and l[i-x] and (xx[x]=0) then
 begin
 xx[x]:=i;
 yy[i]:=false;
 r[x+i]:=false;
 l[i-x]:=false;
 if x=n then
  begin
  inc(p);
  if p>n then
  exit;
  end else search1(x+1);
  xx[x]:=0;
  yy[i]:=true;
  r[x+i]:=true;
  l[i-x]:=true;
 end;{if}
end;{search}

begin
start;
search(1);
fillchar(yy,sizeof(yy),true);
fillchar(l,sizeof(l),true);
fillchar(r,sizeof(r),true);
search1(1);
write(f2,p);
close(f1);
close(f2);
end.