MCIRGAME - Point Connection Game in a Circle

Tác giả: RR

Ngôn ngữ: Pascal

//Written by Nguyen Thanh Trung
{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=101;
type
  big=array[0..MAXN] of longint;
var
  f1,f2:text;
  f:array[0..150] of big;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1); close(f2);
end;
operator + (a,b:big) c:big;
var
  i,nho:longint;
begin
  fillchar(c,sizeof(c),0); c[0]:=max(a[0],b[0]);
  nho:=0;
  for i:=1 to c[0] do
    begin
      c[i]:=a[i]+b[i]+nho;
      if c[i]<10 then nho:=0 else begin c[i]-=10; nho:=1; end;
    end;
  if nho>0 then
    begin
      inc(c[0]);
      c[c[0]]:=1;
    end;
end;
operator * (a,b:big) c:big;
var
  i,j,nho:longint;
begin
  fillchar(c,sizeof(c),0);
  c[0]:=a[0]+b[0]+1;
  for i:=1 to a[0] do
  for j:=1 to b[0] do
    c[i+j-1]+=a[i]*b[j];
  nho:=0;
  for i:=1 to c[0] do
    begin
      c[i]+=nho;
      if c[i]<10 then nho:=0
      else begin nho:=c[i] div 10; c[i]:=c[i] mod 10; end;
    end;
  if nho>0 then begin inc(c[0]); c[c[0]]:=nho; end;
  while (c[0]>0) and (c[c[0]]=0) do dec(c[0]);
end;
procedure init;
var
  i,j:longint;
begin
  f[0][0]:=1; f[0][1]:=1;
  for i:=1 to 150 do
    for j:=i-1 downto 0 do
      f[i]+=f[j]*f[i-j-1];
end;
procedure solve;
var
  n,i:longint;
begin
  read(f1,n);
  while n>=0 do
    begin
      for i:=f[n,0] downto 1 do
        write(f2,f[n,i]);
      writeln(f2);
      read(f1,n);
    end;
end;
begin
  init;
  openF;
  solve;
  closeF;
end.

Download