MIXUP2 - Đàn bò hỗn loạn

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
Program MIXUP2;
        Const
                input  = '';
                output = '';
        Var
                a,d: array[0..16] of integer;
                  F: array[0..65535,1..16] of int64;
                n,k: integer;

Procedure init;
          Var
                fi: text;
                 i: integer;
          Begin
                Assign(fi, input);
                        Reset(fi);

                Readln(fi, n, k);
                For i:= 1 to n do read(fi, a[i]);

                Close(fi);
          End;

Procedure power;
          Var
                i: integer;
          Begin
                d[0]:= 1;
                For i:= 1 to n do d[i]:= d[i - 1] shl 1;
          End;

Procedure optimize;
          Var
                i,j,t,s,tmp: integer;
          Begin
                Fillchar(F, sizeof(F), 0);
                For i:= 1 to n do F[d[i - 1],i]:= 1;

                For i:= 0 to d[n] - 1 do
                  For j:= 1 to n do if i and d[j - 1] = d[j - 1] then
                        Begin
                                t:= i - d[j - 1];
                                For s:= 1 to n do
                                  if t and d[s - 1] = d[s - 1] then
                                        Begin
                                                tmp:= abs(a[j] - a[s]);
                                                If tmp > k then F[i,j]:= F[i,j] + F[t,s];
                                        End;
                        End;
          End;

Procedure printresult;
          Var
                   fo: text;
                  res: int64;
                    i: integer;
          Begin
                Assign(fo, output);
                        Rewrite(fo);

                res:= 0;
                For i:= 1 to n do res:= res + F[d[n] - 1,i];
                Writeln(fo, res);

                Close(fo);
          End;

Begin
        init;
        power;
        optimize;
        printresult;
End.

Download