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毫秒