HDU 1133 Buy the Ticket 卡特兰数

时间:2021-12-30 22:50:35

设50元的人为+1 100元的人为-1 满足前随意k个人的和大于等于0 卡特兰数

C(n+m, m)-C(n+m, m+1)*n!*m!

import java.math.*;
import java.util.*; public class Main { /**
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cas = 1;
while(true){
int m = sc.nextInt();
int n = sc.nextInt();
if(m == 0 && n == 0)
break;
System.out.println("Test #"+cas+":");
cas++;
if(m < n){
System.out.println(0);
continue;
}
BigInteger ans1 = BigInteger.valueOf(1);
int x = n+m;
for(int i = 1; i <= m; i++){
ans1 = ans1.multiply(BigInteger.valueOf(x));
x--;
}
for(int i = 1; i <= n; i++){
ans1 = ans1.multiply(BigInteger.valueOf(i));
}
BigInteger ans2 = BigInteger.valueOf(1);
x = n+m;
for(int i = 1; i <= m+1; i++){
ans2 = ans2.multiply(BigInteger.valueOf(x));
x--;
ans2 = ans2.divide(BigInteger.valueOf(i));
}
for(int i = 1; i <= n; i++){
ans2 = ans2.multiply(BigInteger.valueOf(i));
}
for(int i = 1; i <= m; i++){
ans2 = ans2.multiply(BigInteger.valueOf(i));
} System.out.println(ans1.subtract(ans2));
}
}
}