分析
代码
#include<bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
double p[1<<20],Ans;
int n,m,N;
inline int sum(int x){
int res=0;
while(x){
if(x&1)res++;
x>>=1;
}
return res;
}
int main(){
int i,j,k;
scanf("%d",&n);
N=1<<n;
for(i=0;i<N;i++)scanf("%lf",&p[i]);
for(i=1;i<N;i<<=1)
for(j=0;j<N;j+=(i<<1))
for(k=0;k<i;k++)
p[i+j+k]+=p[j+k];
for(i=1;i<N;i++)if(1-p[(N-1)^i]>eps)
Ans+=((sum(i)&1)?1:-1)/(1-p[(N-1)^i]);
if(Ans<1e-10)puts("INF");
else printf("%0.6lf\n",Ans);
return 0;
}