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

Tác giả: flashmt

Ngôn ngữ: Pascal

const fi='';
      fo='';
      maxc=65535;
      maxn=15;
var n,k:longint;
    re:int64;
    a:array[0..maxn] of longint;
    f:array[0..maxc,0..maxn] of int64;
    p:array[0..maxn] of longint;

procedure rf;
var i:longint;
begin
     assign(input,fi);
     reset(input);
     read(n,k);
     dec(n);
     for i:=0 to n do read(a[i]);
     close(input);
end;

procedure init;
var i:longint;
begin
     p[0]:=1;
     for i:=1 to n+1 do p[i]:=p[i-1]*2;
end;

function out(j,i:longint):boolean;
begin
     out:=((i shr j) and 1)=0;
end;

procedure pr;
var i,j,max,q:longint;
begin
     init;
     fillchar(f,sizeof(f),0);
     for i:=0 to 15 do f[p[i],i]:=1;
     max:=p[n+1]-1;
     for i:=1 to max do
         for j:=0 to n do
             if not out(j,i) then
                for q:=0 to n do
                    if out(q,i) and (abs(a[q]-a[j])>k) then
                       f[i or p[q],q]:=f[i or p[q],q]+f[i,j];
     re:=0;
     for i:=0 to n do
         re:=re+f[max,i];
end;

procedure wf;
begin
     assign(output,fo);
     rewrite(output);
     write(re);
     close(output);
end;

begin
     rf;
     pr;
     wf;
end.

Download