【组合数+高精度】爱与希望(hope)

 

爱与希望(hope)

  话说班帅JDC成功从大楼中逃出来后,将班上的同学都集结到了操场上,然后清点了人数,发现并没有任何人受伤或失踪。但是JDC发现有很多同学都因为这次地震心里有了创伤和阴影,于是他准备安排安慰一下他们。现在JDC有n个人需要安慰,而他可以安排m个同学去安慰(JDC自己有其他事做,所以他不亲自去安慰)。每个有阴影的同学都需要至少两个同学去安慰。现在,班帅JDC想知道他有多少种分配的方法。

  输入:仅一行,两个数N,M;

  输出:方案数ANS;

样例1

  input

  3  5

  output

  0

样例2

  input

  2 7

  output

4

样例2 说明

 第一个需安慰的同学   第二个需安慰的同学

           2                                  5

           3                                  4

           4                                  3

           5                                  2

对所有数据N<100,M<=500;

===============================

========================

var
  n,m:longint;
  num:array[0..1000]of longint;
  num_s:longint;
procedure init;
begin
  assign(input,'hope.in');
  assign(output,'hope.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

procedure main;
var
  i,j:longint;
begin
  readln(n,m);
  if 2*n>m then
    begin
      writeln(0);
      terminate;
    end;
  if 2*n=m then
    begin
      writeln(1);
      terminate;
    end;
  m:=m-n;
  num_s:=1;
  fillchar(num,sizeof(num),0);
  num[1]:=1;
  for i:=m-n+1 to m-1 do
    begin
      for j:=1 to num_s do num[j]:=num[j]*i;
      //先相乘..
      for j:=1 to num_s do
        begin
          num[j+1]:=num[j+1]+num[j] div 10;
          num[j]:=num[j] mod 10;
        end;
      //调整.
      j:=num_s+1;
      while num[j]>10 do
        begin
          num[j+1]:=num[j+1]+num[j] div 10;
          num[j]:=num[j] mod 10;
          inc(j);
        end;
      if num[j]=0 then dec(j);
      num_s:=j;
    end;
  for i:=n-1 downto 2 do
    begin
      for j:=num_s downto 1 do
        begin
          num[j-1]:=(num[j] mod i)*10+num[j-1];
          num[j]:=num[j] div i;
        end;
      j:=num_S;
      while num[j]=0 do dec(j);
      num_s:=j;
    end;
  for i:=num_s downto 1 do
    write(num[i]);
end;

begin
  init;
  main;
  terminate;
end.


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值