[HAOI2015]按位或

题目描述

刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or)操作。选择数字i的概率是p[i]。保证0<=p[i]<=1,Σp[i]=1问期望多少秒后,你手上的数字变成2^n-1。

输入输出格式

输入格式


第一行输入n表示n个元素,第二行输入2^n个数,第i个数表示选到i-1的概率

输出格式


仅输出一个数表示答案,绝对误差或相对误差不超过1e-6即可算通过。如果无解则要输出INF

输入输出样例

输入样例 #1

2
0.25 0.25 0.25 0.25

输出样例 #1

2.6666666667

说明

对于100%的数据,n<=20 ```cpp //liuchenrui #include #include #include #include #include #define AC {fclose(fstd),fclose(fuser);return 0;} #define WA {fclose(fstd),fclose(fuser);return 1;} #define PE {fclose(fstd),fclose(fuser);return 5;} #define eps 1e-6 int main(int const argc, char*const argv[]){ FILE *fstd,*fuser; fstd=fopen(argv[2],"r"); fuser=fopen(argv[3],"r"); //fstd=fopen("x1.in","r"); //fuser=fopen("x2.in","r"); char s[30],t[30]; if(fscanf(fuser,"%s",s+1)==-1)WA; fscanf(fstd,"%s",t+1); if(s[1]=='I' && t[1]=='I')AC; if(s[1]=='I' || t[1]=='I')WA; double p,q; sscanf(s+1,"%lf",&p); sscanf(t+1,"%lf",&q); if(fabs(p-q)