记录编号 |
359671 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 11427] 玩纸牌 |
最终得分 |
100 |
用户昵称 |
MistyEye |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.170 s |
提交时间 |
2016-12-24 07:36:26 |
内存使用 |
0.40 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 105;
double P, PM, f[maxn][maxn];
int p, q, N, M;
int main(){
freopen("expected.in","r",stdin);
freopen("expected.out","w",stdout);
int kase; scanf("%d", &kase);
for(int o=1; o<=kase; ++o) {
scanf("%d/%d %d", &p, &q, &N);
P = 1.0*p/q;
PM = 0;
f[0][0] = 1;
for(int i=1; i<=N; ++i) {
f[i][0] = (1-P)*f[i-1][0];
for(int j=1; j<=i; ++j) {
f[i][j] = 0;
if((j-1)*q <= p*(i-1)) f[i][j] += P*f[i-1][j-1];
if(i!=j && j*q <= p*(i-1)) f[i][j] += (1-P)*f[i-1][j];
if(j*q > p*i) {
PM += f[i][j]; break;
}
}
}
/*
* 递推,当满足要求时直接终止并累加贡献
* 不从终止的地方转移过来
* 算出每天的成功的概率PM
* 然后就是一个简单的超几何分布的期望
*/
int ans = (int)ceil(PM/(1-PM));
if(!ans) ans = 1;
printf("Case #%d: %d\n", o, ans);
}
getchar(), getchar();
return 0;
}