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.

Download