点击这里查看原题
还是看别人的题解吧,很简单易懂
/*
User:Small
Language:C++
Problem No.:2318
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
int n;
double p,q,f[1005],g[1005];
void solve(){
scanf("%d%lf%lf",&n,&p,&q);
f[0]=0;
g[0]=1;
n=min(n,100);
for(int i=1;i<=n;i++){
if(f[i-1]>g[i-1]) p=1-p,q=1-q;
f[i]=(p*g[i-1]+(1-p)*q*f[i-1])/(1-(1-p)*(1-q));
g[i]=(q*f[i-1]+(1-q)*p*g[i-1])/(1-(1-p)*(1-q));
if(f[i-1]>g[i-1]) p=1-p,q=1-q;
}
printf("%.6lf\n",f[n]);
}
int main(){
freopen("data.in","r",stdin);//
int t;
scanf("%d",&t);
while(t--) solve();
return 0;
}