QBCOND - Quan hệ có điều kiện
Tác giả: ll931110
Ngôn ngữ: Pascal
{$MODE DELPHI}
program QBCOND;
const
maxn = 10;
var
a: array[1..maxn] of integer;
t: array[1..maxn] of int64;
n,res: integer;
k: int64;
procedure firstlist;
var
i: integer;
begin
for i := 1 to maxn do
t[i] := (i - 1) * i div 2;
end;
function calc(x,y: integer): integer;
var
z,p: integer;
begin
p := 1;
for z := 1 to y do p := p * (x - z + 1) div z;
calc := p;
end;
procedure addres;
var
i,s,z: integer;
begin
z := 1;
s := 0;
i := 1;
while s < n do
begin
s := s + a[i];
z := z * calc(s,a[i]);
inc(i);
end;
res := res + z;
end;
procedure attempt(x,y,z: integer);
var
p: integer;
begin
for p := 1 to y do
begin
a[x] := p;
if p < y then attempt(x + 1,y - p,z - t[p]) else if z = t[p] then addres;
end;
end;
begin
firstlist;
repeat
read(n);
if n <> -1 then
begin
readln(k);
res := 0;
attempt(1,n,k);
writeln(res);
end;
until n = -1;
end.