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.

Download