M00PAIR - 0 0 Pairs
Tác giả: ll931110
Ngôn ngữ: Pascal
Program M00PAIR;
Const
input = '';
output = '';
maxn = 1000;
maxd = 40;
maxi = 35;
remain = 1000000000000;
Var
p00,p01,p10,p11: array[1..maxn + 1,1..maxd] of qword;
p: array[1..maxd] of qword;
n: integer;
fi,fo: text;
Procedure openfile;
Begin
Assign(fi, input);
Reset(fi);
Assign(fo, output);
Rewrite(fo);
End;
Procedure optimize;
Var
i,j: integer;
Begin
Fillchar(p00, sizeof(p00), 0);
Fillchar(p01, sizeof(p01), 0);
Fillchar(p10, sizeof(p10), 0);
Fillchar(p11, sizeof(p11), 0);
Fillchar(p, sizeof(p), 0);
p[1]:= 1;
p01[1,1]:= 1;
For i:= 2 to maxn do
Begin
For j:= 1 to maxi do
Begin
p00[i,j]:= p00[i,j] + p01[i - 1,j];
If p00[i,j] >= remain then
Begin
p00[i,j + 1]:= p00[i,j + 1] + p00[i,j] div remain;
p00[i,j]:= p00[i,j] mod remain;
End;
p11[i,j]:= p11[i,j] + p10[i - 1,j];
If p11[i,j] >= remain then
Begin
p11[i,j + 1]:= p00[i,j + 1] + p00[i,j] div remain;
p11[i,j]:= p11[i,j] mod remain;
End;
p01[i,j]:= p01[i,j] + p00[i - 1,j] + p[j];
If p01[i,j] >= remain then
Begin
p01[i,j + 1]:= p01[i,j + 1] + p01[i,j] div remain;
p01[i,j]:= p01[i,j] mod remain;
End;
p10[i,j]:= p10[i,j] + p11[i - 1,j] + p[j];
If p10[i,j] >= remain then
Begin
p10[i,j + 1]:= p10[i,j + 1] + p10[i,j] div remain;
p10[i,j]:= p10[i,j] mod remain;
End;
End;
For j:= 1 to maxi do p[j]:= p[j] * 2;
For j:= 1 to maxi do if p[j] >= remain then
Begin
p[j + 1]:= p[j + 1] + p[j] div remain;
p[j]:= p[j] mod remain;
End;
End;
End;
Procedure printresult;
Var
n,i,j,k: integer;
s: string;
Begin
While not eof(fi) do
Begin
Readln(fi, n);
If n = 1 then writeln(fo, 0) else
Begin
k:= maxi;
While p00[n,k] = 0 do dec(k);
Write(fo, p00[n,k]);
For i:= k - 1 downto 1 do
Begin
str(p00[n,i], s);
For j:= 1 to 12 - length(s) do write(fo, 0);
Write(fo, s);
End;
Writeln(fo);
End;
End;
End;
Procedure closefile;
Begin
Close(fo);
Close(fi);
End;
Begin
openfile;
optimize;
printresult;
closefile;
End.