PersonalCorpus 版 (精华区)
149885 07:52:26 2 Mar 2002
Bozhang,HIT,P.R.China 1169 Pascal Accepted 0.03 sec 53K
var
n,k:integer;
path:array[1..102] of byte;
dep:byte;
flag:boolean;
i,j:integer;
procedure tryit(b,c:integer);
var i,j:integer;
begin
if flag then exit;
if c<0 then exit;
if c=0 then begin
if b=2 then exit;
if b<>0 then begin
path[dep]:=b;
inc(dep);
end;
flag:=true;
exit;
end;
for i:=3 to b do begin
j:=i*(b-i);
if j>k then exit;
path[dep]:=i; inc(dep);
tryit(b-i,c-j);
if flag then exit;
dec(dep);
end;
end;
begin
readln(n,k);
for i:=1 to n do begin
dep:=1; flag:=false;
tryit(i,k-((n+i-1)*(n-i) div 2));
if flag then break;
end;
if flag then begin
for j:=1 to n-i do writeln (j,' ',j+1);
k:=n-i+1;
while dep<>1 do begin
dec(dep);
for i:=k to k+path[dep]-2 do
for j:=i+1 to k+path[dep]-1 do writeln(i,' ',j);
if dep<>1 then writeln(k,' ',k+path[dep]);
k:=k+path[dep];
end;
end else writeln(-1);
end.
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.184毫秒