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


    【题目来源】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对数,最后在用指数还原。

    【代码如下】

     1 #include <iostream>
     2 #include <iomanip>
     3 #include <cstdio>
     4 #include <cmath>
     5 
     6 #define FILE_IO
     7 
     8 using namespace std;
     9 
    10 int N, Cnt;
    11 double P, Q, Ans;
    12 
    13 int main()
    14 {
    15     #ifdef FILE_IO
    16     freopen("test.in", "r", stdin);
    17     #endif // FILE_IO
    18     while (cin >> N >> P)
    19     {
    20         Q = log(1 - P), P = log(P);
    21         double Tp = (N + 1) * P, Tq = (N + 1) * Q, Ans = 0, Tc = 0;
    22         for (int i = 0; i < N; ++i)
    23         {
    24             if (Tp + Tc > -30 || Tq + Tc > -30) Ans += (exp(Tp + Tc) +exp(Tq + Tc)) * (N - i);
    25             Tp += Q, Tq += P, Tc += log(N + i + 1) - log(i + 1);
    26         }
    27         cout << "Case " << ++Cnt << ": ";
    28         cout << setprecision(12) << setiosflags(ios :: fixed) << Ans << endl;
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    弹性布局、动画、过渡
    HTML
    数据库对象
    函数
    oracle与PL/SQL安装
    网络编程
    多线程
    联调接口
    vue 全局变量
    vue ajax请求
  • 原文地址:https://www.cnblogs.com/GXZC/p/2908810.html
Copyright © 2020-2023  润新知