UVa 557 - Burger

题目大意:有n个牛肉汉堡和n个鸡肉汉堡给2n个孩子吃。每个孩子在吃之前都要抛硬币,正面吃牛肉汉堡,反面吃鸡肉汉堡。如果剩下的所有汉堡都一样,则不用抛硬币。求最后两个孩子吃到相同汉堡的概率。

正面不好思考,考虑最后两个孩子吃不同汉堡的概率。则根据概率相关知识,P(n) = (1 / 2) ^ (2n - 2) * C(n - 1, 2n - 2),由P(n)和P(n+1)的关系得到:P(n+1) / P(n) = (2n - 1) / 2n;由P(1) = 1可递推得到结果打表。

#include <iostream>
#include <cstdio>
using namespace std;

double res[51200];
void init()
{
	res[1] = 1;
	for (int i = 1; i <= 50000; ++i)
		res[i + 1] = res[i] * (2 * i - 1) / (2 * i);
}
int main()
{
	init(); int kase, n; cin >> kase;
	while (kase--){
		cin >> n;
		printf("%.4f\n", 1 - res[n / 2]);
	}
	return 0;
}


posted @ 2015-03-04 10:05  Popco  阅读(132)  评论(0编辑  收藏  举报