期望推公式
注意当p为0或1时要特判
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
double eps=1e-6;
int main()
{
int T,kase=0;
double p,q;
int k1,k2;
scanf("%d",&T);
while(T--)
{
scanf("%lf%d%d",&p,&k1,&k2);
q=1.0-p;
if(fabs(p-0.0)<eps)
{
printf("Case %d: %d\n",++kase,k1);
continue;
}
if(fabs(q-0.0)<eps)
{
printf("Case %d: %d\n",++kase,k2);
continue;
}
double tmp1=1.0-pow(q,k1-1);
double tmp2=1.0-pow(p,k2-1);
double s1=tmp1/p;
double s2=tmp2/q;
double f1=(s1*s2*p+s1)/(1.0-p*q*s1*s2);
double g1=(q*f1+1.0)*s2;
printf("Case %d: %f\n",++kase,f1*q+g1*p+1.0);
}
return 0;
}