负二项分布:又称帕斯卡分布。
它表示,已知一个事件在伯努利试验中每次的出现概率是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; }