CWAY - Đếm số đường đi trên đồ thị đầy đủ

Tác giả: RR

Ngôn ngữ: Pascal

const
  base=1000;

type
  big=array[0..1000] of longint;

var
  f:array[2..1000] of big;
  i,n:longint;

procedure nhan(a:big; k:longint; var b:big);
    var
      i,nho:longint;
    begin
      nho:=0; b[0]:=a[0];
      for i:=1 to a[0] do
        begin
          b[i]:=a[i]*k+nho;
          nho:=b[i] div base;
          b[i]:=b[i] mod base;
        end;

      while nho>0 do
        begin
          inc(b[0]);
          b[b[0]]:=nho mod base;
          nho:=nho div base;
        end;
    end;

procedure cong1(var a:big);
    var
      i,nho:longint;
    begin
      nho:=1;
      for i:=1 to a[0] do
        begin
          a[i]:=a[i]+nho;
          if a[i]<base then nho:=0
          else begin nho:=1; dec(a[i],base); end;
        end;
      if nho>0 then
        begin
          inc(a[0]);
          a[a[0]]:=nho;
        end;
    end;

procedure print(var a:big);
    var
      i:longint;
    begin
      write(a[a[0]]);
      for i:=a[0]-1 downto 1 do
        if a[i]>=100 then write(a[i])
        else if a[i]>=10 then write('0',a[i])
        else write('00',a[i]);
    end;

begin
  f[2][0]:=1; f[2][1]:=1;
  for i:=3 to 1000 do
    begin
      nhan(f[i-1],i-2,f[i]);
      cong1(f[i]);
    end;

  read(n);
  print(f[n]);
end.

Download