习题10-12 汉堡 UVa557

来源:互联网 发布:三界淘宝商 编辑:程序博客网 时间:2024/06/10 04:41

1.题目描述:点击打开链接

2.解题思路:本题属于概率论的题目。根据题意描述,不妨先求出最后两个人吃到不同的汉堡的概率,设其为p。那么易知,前面n-2个人中,有n/2-1个人吃了牛肉堡,剩下的人吃了鸡肉堡。因此p[n]=(0.5)^(n-2)*C(n-2,n/2-1)。最终答案为1-p。不过可以发现p可以进行递推,因此可以事先算出所有的p值,最后直接输出答案即可。

3.代码:

#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;#define MAXN 100010double dp[MAXN];void init(){dp[2] = 1;for (int i = 2; i<MAXN; i++)dp[i + 2] = dp[i] * 1.0*(i - 1) / (double)(i);}int main(){//freopen("t.txt", "r", stdin);int T, N;init();scanf("%d", &T);while (T--){scanf("%d", &N);printf("%.4lf\n", 1 - dp[N]);}return 0;}

0 0