爱与希望(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.