题目大意:给定2n个人,有n个汉堡和n个 奶酪汉堡,Ben and Bill排在最后,然后抛硬币,正反面分别拿汉堡和奶酪汉堡,如果有一样拿完了就不需要在扔硬币了。求最后ben和bill拿到一样的概率
解题思路:这题直接算的话比较麻烦,因为不知道从第几个开始停止抛硬币。反过来算他们俩得到不同面包的概率比较简单。这样硬币就会从头抛到尾。所有的情况就是C(n/2 - 1, n - 2),就是把n/2 - 1的面包分给前n-2个孩纸。没种情况是概率就是(0.5^n-2),所以a[n]=C(n/2 - 1, n - 2)*(0.5^n-2)=C(n/2 - 1, n - 2)*(2^2-n).
因为n最大为100000,直接算会超出范围,一边乘一边除也不行。所以要推导一下递归公式:
#include <cstdio> int main() { double A[100010]; A[2] = 1; for (int i = 4; i <= 100000; i += 2) A[i] = A[i - 2] * (i - 3) / (i - 2); int n; scanf("%*d"); while (scanf("%d", &n) != EOF) printf("%.4lf\n", 1 - A[n]); return 0; }