hdu 4465 Candy

  负二项分布:又称帕斯卡分布。

  它表示,已知一个事件在伯努利试验中每次的出现概率是p,在一连串伯努利试验中,一件事件刚好在第r+k次实验中出现第r次的概率。

  题意:有两罐糖果,初始化每罐有n个糖果,每次取第一罐糖果的概率是p,则另一罐是1-p,求当打开一罐发现为空时,另一罐糖果数目的期望。

  直接计算会向下溢出。

#include<stdio.h>
#include<math.h>

int n;
double p,q;
double f[400005];
double logC(int m,int n)
{
    return f[m]-f[n]-f[m-n];
}
int main()
{
    int cas=1;
    f[0]=0;
    for(int i=1;i<=400002;i++)  f[i]=f[i-1]+log(i*1.0);
    while(scanf("%d%lf",&n,&p)!=EOF)
    {
        q=1-p;
        double ans=0;
        for(int k=0;k<=n;k++)
            ans+=(n-k)*(exp(logC(n+k,k)+(n+1)*log(q*1.0)+k*log(p*1.0))+exp(logC(n+k,k)+(n+1)*log(p*1.0)+k*log(q*1.0)));
        printf("Case %d: %.6lf
",cas++,ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/yongren1zu/p/3250255.html