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.