记录编号 160507 评测结果 AAAAAAAAAA
题目名称 [HAOI 2015]按位或 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 1.618 s
提交时间 2015-04-28 07:21:31 内存使用 20.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const double eps=1e-10;
int N;
double P[1<<20];
double F[1<<20];
int cnt[1<<20];
int getdig(int s,int i){return (s>>i)&1;}
void work(void){
	cnt[0]=0;
	for(int s=1;s<(1<<N);s++){
		cnt[s]=cnt[s>>1]+(s&1);
	}
	memcpy(F,P,sizeof(F));
	for(int i=0;i<N;i++){
		for(int s=0;s<(1<<N);s++){
			if(getdig(s,i)) F[s]+=F[s^(1<<i)];
		}
	}
	double ans=0;
	for(int s=0;s<(1<<N)-1;s++){
		double p=F[s];
		if(1-p<eps){
			printf("INF\n");
			return;
		}
		double now=1/(1-p);
		if((N-cnt[s])&1) ans+=now;
		else ans-=now;
	}
	printf("%.10lf\n",ans);
}
void read(void){
	scanf("%d",&N);
	for(int i=0;i<(1<<N);i++) scanf("%lf",&P[i]);
}
int main(){
	freopen("haoi2015_set.in","r",stdin);
	freopen("haoi2015_set.out","w",stdout);
	read();
	work();
	return 0;
}