LightOJ 1408 Batting Practice (期望)

灰太狼 2021-11-02 04:04 332阅读 0赞

题目连接:http://lightoj.com/volume\_showproblem.php?problem=1408

题意:连续进k1个球或连续不进k2个球则游戏结束,给出进球概率p,求到游戏结束时投球个数的期望。

思路:f[i]表示连续i次不命中时到游戏结束剩余投球个数的期望,t[i]表示连续i次命中时到游戏结束剩余投球个数的期望。

设命中概率p,则不命中q=1-p。f[i] = q*(f[i+1]+1)+p*(1+t[1]) , t[i] = p*(t[i+1]+1)+q*(1+f[1]).

边界:f[n]=t[m]=0。

解出f[1],t[1],则答案为f[0]=t[0]=p*t[1]+q*f[1]+1.

高中时解方程的准确率已经完全木有了。。。。

  1. #include <cstdio>
  2. #include <cmath>
  3. const double STD=1e-10;
  4. int main ()
  5. {
  6. #ifdef ONLINE_JUDGE
  7. #else
  8. freopen("read.txt","r",stdin);
  9. #endif
  10. int T,k1,k2;
  11. double p,q;
  12. scanf("%d",&T);
  13. for (int Cas=1;Cas<=T;Cas++)
  14. {
  15. scanf("%lf%d%d",&p,&k1,&k2);
  16. q=1-p;
  17. if (p>1-STD)
  18. {
  19. printf("Case %d: %lf\n",Cas,1.0*k2);
  20. continue;
  21. }
  22. if (p<STD)
  23. {
  24. printf("Case %d: %lf\n",Cas,1.0*k1);
  25. continue;
  26. }
  27. double a=1-pow(q,k1-1);
  28. double b=1-pow(p,k2-1);
  29. double x=(a*b/q+a/p)/(1-a*b),y=b*x+b/q;
  30. printf("Case %d: %lf\n",Cas,p*y+q*x+1);
  31. }
  32. return 0;
  33. }

发表评论

表情:
评论列表 (有 0 条评论,332人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hdu1408

    [为什么80%的码农都做不了架构师?>>> ][80_]  ![hot3.png][] [http://acm.hdu.edu.cn/showproblem.php?pid=