题意:一个人若连续进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; }