点击这里查看原题
还是看别人的题解吧,很简单易懂
/*
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;
}

这是一个C++程序示例,用于解决特定数学问题。程序通过输入参数n、概率p和q,计算并输出经过一系列转换后的最终概率值。核心部分包括条件判断、概率更新以及递推公式计算。
1440

被折叠的 条评论
为什么被折叠?



