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.