您的位置:首页 > 其它

HDU 4465 Candy( 期望)

2012-11-23 13:40 447 查看
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4465

题意:有两个盒子A和B,每个盒子中开始各有n颗糖 。每次打开A盒子的概率为p,打开B盒子的概率为1-p。每次打开一个盒子,如果打开的盒子还有糖,则吃掉一颗;否则打开另一个吃掉一颗。问在打开其中一个发现是空的时,另一个盒子中糖的数量的期望。
思路:出现上面的情况必然是从第n+1次开始。i属于[n+1,n+n]。第i次打开A没有糖的概率为(i-1)!/n!/(i-1-n)!*p^n*(1-p)^(i-1-n)*p。B盒子类似。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <cmath>
using namespace std;

int n,num=0;
double p;

int main()
{
while(scanf("%d%lf",&n,&p)!=-1)
{
double q=1-p;
if(fabs(p)<1e-10|fabs(q)<1e-10)
{
printf("Case %d: %.6lf\n",++num,1.0*n);
continue;
}
double a1=(n+1)*log(p);
double a2=(n+1)*log(q);
double ans=0,temp=0,t1,t2;
int i;
for(i=n+1;i<=n+n;i++)
{
t1=temp+a1+(i-1-n)*log(q)+log(1.0+n+n-i);
t2=temp+a2+(i-1-n)*log(p)+log(1.0+n+n-i);
ans+=exp(t1)+exp(t2);
temp+=log(1.0*i)-log(1.0*i-n);
}
printf("Case %d: %.6lf\n",++num,ans);
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: