UVA - 557 Burger

题目大意:给定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,直接算会超出范围,一边乘一边除也不行。所以要推导一下递归公式:

UVA - 557 Burger_第1张图片

#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;
}


你可能感兴趣的:(UVA - 557 Burger)