您的位置:首页 > 其它

【数学期望】【2012 ACM/ICPC 成都赛区现场赛】【B.Candy】

2013-02-07 16:21 525 查看
【题目来源】http://acm.hdu.edu.cn/showproblem.php?pid=4465

【题目分析】公式: Ans = Sum{(N - I)* C(I, N + I) * (P^(N + 1) * Q^I + Q^(N + 1) * P ^I)},这个题目重在实现这个公式的技巧。我们注意到这个题目在中间过程可能会涉及高精度,但是结果是不会大于20W的。因此将之间的数都取Ln对数,最后在用指数还原。

【代码如下】

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>

#define FILE_IO

using namespace std;

int N, Cnt;
double P, Q, Ans;

int main()
{
#ifdef FILE_IO
freopen("test.in", "r", stdin);
#endif // FILE_IO
while (cin >> N >> P)
{
Q = log(1 - P), P = log(P);
double Tp = (N + 1) * P, Tq = (N + 1) * Q, Ans = 0, Tc = 0;
for (int i = 0; i < N; ++i)
{
if (Tp + Tc > -30 || Tq + Tc > -30) Ans += (exp(Tp + Tc) +exp(Tq + Tc)) * (N - i);
Tp += Q, Tq += P, Tc += log(N + i + 1) - log(i + 1);
}
cout << "Case " << ++Cnt << ": ";
cout << setprecision(12) << setiosflags(ios :: fixed) << Ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: