lightoj 1408 Batting Practice

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

  进球概率为p,不进概率 q=1-p

  设 f[i] 表示连续 i 次不进距离连续k2次不进结束的期望,t[i]表示连续 i 次进球,距离连续k1次进球结束的期望。显然,f[k2]=p[k1]=0;

  f[i] = q*(f[i+1]+1)+p*(1+t[1]) , t[i] = p*(t[i+1]+1)+q*(1+f[1]).

  答案是 p*t[1]+q*f[1]+1.

  然后就算t[1],f[1]去吧~~数学不好的人伤不起啊

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

int main()
{
    int T,cas=1;
    double p,q;
    int k1,k2;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%d%d",&p,&k1,&k2);
        q=1-p;
        printf("Case %d: ",cas++);
        if(p>1-1e-10)
        {
            printf("%.8lf
",1.0*k2);
            continue;
        }
        else if(p<1e-10)
        {
            printf("%.8lf
",1.0*k1);
            continue;
        }
        double f1=1-pow(q,k1-1),b1=f1/(1-q);
        double f2=1-pow(p,k2-1),b2=f2/(1-p);
        double x=(f1*b2+b1)/(1-f1*f2),y=f2*x+b2;
        printf("%.8lf
",q*x+p*y+1);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/yongren1zu/p/3250803.html