题目大意: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]); }