牛客竞赛-比赛

题目描述

你在打比赛,这场比赛总共有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
",ans);
	for(int i=1;i<=n;i++){
		printf("%.6f
",dfs(1,i));
	}
}
原文地址:https://www.cnblogs.com/naruto-mzx/p/11803522.html