题目链接:hdu 4586 Play the Dice
题目大意:给出一个n,表示有一个正n面形,然后给出每个面的得分。接着是m,表示丢到哪些面后可以获得再掷一次的机会,问说得分的期望。
解题思路:将首次的得分期望看做是a0, 第二次的得分期望即为a0 * (m/n), 第n次的得分期望即为a0 *(m/n)^(n-1),
期望p = ∑(n)a0 * q^(i-1), q = (m/n); 根据等比数列求和公式得:p = a0(1-q^n)/(1-q).
然后分情况讨论,如果q为1的话,那么根据(1-q)=0,公式无法计算,但是根据题目可以知道,q为1的话表示不管丢到哪一面都能继续下去,根本停不下来,所以如果a0不为0的话,答案应该是inf(题目要求),如果为0,即输出0。
如果q<1的话,当n趋近与无穷大时,q^n趋近于0,p = a0/(1-q).
#include <stdio.h>
#include <string.h>
#include <math.h>
const double INF = ((1<<31)-1);
const double eps = 1e-6;
const int N = 205;
int n, m;
double p, q;
void init () {
int sum, cnt, a, v[N];
sum = cnt = 0;
memset(v, 0, sizeof(v));
for (int i = 0; i < n; i++) {
scanf("%d", &a);
sum += a;
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &a);
if (v[a]) continue;
v[a] = 1;
cnt++;
}
p = sum * 1.0 / n;
q = cnt * 1.0 / n;
}
int main () {
while (scanf("%d", &n) == 1) {
init ();
if (fabs(q - 1) < eps) {
if (fabs(p) > eps)
printf("inf\n");
else
printf("0.00\n");
} else
printf("%.2lf\n", p/(1-q));
}
return 0;
}
分享到:
相关推荐
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
搜索 dfs 解题代码 hdu1241
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu 1166线段树代码
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105. Input Input...
HDU最全ac代码
hdu动态规划算法集锦
自己做的HDU ACM已经AC的题目
hdu题目分类
HDU图论题目分类