M00PAIR - 0 0 Pairs

Tác giả: flashmt

Ngôn ngữ: Pascal

const fi='';
      fo='';
      maxn=1000;
      base=1000000000;
      digit=9;
type bignum=array[0..40] of longint;
var a,b:array[0..maxn] of bignum;
    t,i,l,j,num,k:longint;
    c:array[1..10000] of longint;
    s:string;

procedure double(k:integer);
var i:integer;  mem:byte;
begin
     b[k,0]:=b[k-1,0];
     mem:=0;
     for i:=1 to b[k,0] do
     begin
          b[k,i]:=b[k-1,i]+b[k-1,i]+mem;
          if b[k,i]<base then mem:=0
          else
          begin
               b[k,i]:=b[k,i]-base; mem:=1;
          end;
     end;
     if mem>0 then
     begin
          inc(b[k,0]);
          b[k,b[k,0]]:=mem;
     end;
end;

procedure plus(k:integer);
var i:integer; mem:byte;
begin
     if a[k-2,0]<=b[k-2,0] then a[k,0]:=b[k-2,0]
     else a[k,0]:=a[k-2,0];
     mem:=0;
     for i:=1 to a[k,0] do
     begin
          a[k,i]:=a[k-2,i]+b[k-2,i]+mem;
          if a[k,i]<base then mem:=0
          else
          begin
               a[k,i]:=a[k,i]-base; mem:=1;
          end;
     end;
     if mem>0 then
     begin
          inc(a[k,0]);
          a[k,a[k,0]]:=mem;
     end;
end;

procedure init;
var i:integer;
begin
     b[0,0]:=1; b[1,0]:=1; b[0,1]:=1; b[1,1]:=1;
     a[1,0]:=1;
     for i:=2 to j do
     begin
          double(i);
          plus(i);
     end;
end;

begin
     assign(input,fi);
     reset(input);
     assign(output,fo);
     rewrite(output);
     i:=0; j:=0;
     while not eof(input) do
     begin
          inc(i);
          readln(c[i]);
          if c[i]>j then j:=c[i];
     end;
     num:=i;
     init;
     for k:=1 to num do
     begin
          t:=c[k];
          for i:=a[t,0] downto 1 do
          begin
               if i<a[t,0] then
               begin
                    str(a[t,i],s);
                    l:=length(s);
                    for j:=l+1 to digit do write(0);
               end;
               write(a[t,i]);
          end;
          writeln;
     end;
     close(output);
     close(input);
end.



Download