题目大意:有n + m 个人去电影院买票, 每张票卖50块, 现在m 个人手上有50快, n个人手上是100块, 然后电影院的售票厅又没有准备零钱, 问,n + m个人有多少种排队的方式可以使得售票可以不用中断, 中断是因为没有零钱可以找回。
解题思路:问题可以简单理解成将n + m个人排序, 满足任意一个位置前, 拿100的人总比拿50的多。
卡特兰数公式:(m + n) ! * (m + 1 - n) / (m + 1), 因为最多有200个人, 所以的用高精度去求n !。
bign num[205], cur;
int main() {
int m, n, cas = 1;
num[1] = 1;
for (int i = 2; i < 205; i++) {
cur = i;
num[i] = num[i - 1] * cur;
}
while (scanf("%d%d", &m, &n), n + m) {
printf("Test #%d:\n", cas++);
if (n > m)
printf("0\n");
else {
cur = m + 1 - n;
cur = cur * num[n + m] / (m + 1);
cur.put();
printf("\n");
}
}
return 0;
}