题目大意:有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; }
作者:u011328934 发表于2013-9-3 21:09:10 原文链接
阅读:49 评论:0 查看评论