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盒子类似。
题意:有两个盒子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; }
相关文章推荐
- HDU 4465 Candy ( 数学期望 )
- HDU 4465 Candy--数学求期望
- hdu 4465 Candy (概率期望)
- hdu 4465 Candy 数学期望 负二项分布与 数值计算技巧
- HDU 4465 Candy (数学期望)
- HDU 4465 Candy 概率 (2012成都区域赛B题)
- hdu 4465 Candy 组合数(快速排列组合)
- HDU 4465 Candy 纯数学
- Hdu 4465 Candy (快速排列组合+概率)
- HDU 4465 Candy (概率)
- hdu 4465 Candy
- hdu 4465 求期望
- hdu 4465 Candy
- HDU 4465 (candy)(期望+log优化)
- HDU 4465 Candy(组合+log优化)
- hdu 4465 Candy(二次项概率)
- hdu 4465 Candy 数学
- hdu 4465 求期望(C(m,n)太大用log优化)
- hdu 4465 Candy
- hdu 4465 Candy 快速全排列