UVA - 557 Burger

来源:互联网 发布:什么拳实战最厉害知乎 编辑:程序博客网 时间:2024/05/21 22:56

题目大意:给定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;}


0 0
原创粉丝点击