题目大意:12个题目,给定每个题目能做出来的概率,求总共做对 0-12 道题的概率.
分析:一共12道题,我们可以二进制枚举做对题目的所有情况 ,然后每一种情况的算出做对题数的概率,然后累加输出即可.
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
double a[13][10];
double ans[13][10];
double res[13];
int main()
{
for( int i=1;i<=12;i++ ) cin>>a[i][0];
for( int i=1;i<=12;i++ ) cin>>a[i][1];
for( int i=1;i<=12;i++ ) cin>>a[i][2];
for( int i=1;i<=12;i++ )
{
ans[i][0]=(1-a[i][0])*(1-a[i][1])*(1-a[i][2]);
ans[i][1]=1-ans[i][0];
res[i]=0;
}
for(int i=0;i<(1<<12);i++ )
{
int cnt=0;
double tmp=1;
for( int j=1;j<=12;j++ )
{
if( i>>(j-1) & 1 )
{
cnt++;
tmp*=ans[j][1];
}
else tmp*=ans[j][0];
}
res[cnt]+=tmp;
}
for( int i=0;i<=12;i++ ) printf("%.6f\n",res[i]);
}
京公网安备 11010502036488号