题目描述
你在打比赛,这场比赛总共有12个题
对于第i个题,你的队伍有a[i]的几率解决她
如果解决不了她呢?
由于所有人讨论的都很大声
所以你有b[i]的概率从左边那个队那里听会这个题的做法
有c[i]的概率从右边那个队那里听会这个题的做法
请问最终你们队伍解出0-12题的概率分别是多少
输入描述:
第一行12个数表示a[1] -> a[12]
第二行12个数表示b[1] -> b[12]
第三行12个数表示c[1] -> c[12]
输出描述:
输出13行,第i行表示解出i-1题的概率
保留6位小数
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define db double
const int N=205,mod=999983;
int n=12;db a[N],b[N],c[N],d[N];
inline db dfs(int now,int num){
db ans=1;
if(now==13&&num)return 0;
if(now==13)return ans;
if(num==0){
for(int i=now;i<=12;i++)ans*=1-d[i];
return ans;
}
return ans*(dfs(now+1,num-1)*d[now]+dfs(now+1,num)*(1-d[now]));
}
signed main(){
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++)cin>>c[i];
db ans=1;
for(int i=1;i<=n;i++)
d[i]=1-((1-a[i])*(1-b[i])*(1-c[i])),ans*=(1-d[i]);
printf("%.6f\n",ans);
for(int i=1;i<=n;i++){
printf("%.6f\n",dfs(1,i));
}
}