比赛 组合计数1 评测结果 AAAAAAAAAA
题目名称 按位或 最终得分 100
用户昵称 djyqjy 运行时间 1.621 s
代码语言 C++ 内存使用 10.40 MiB
提交时间 2026-02-26 09:51:44
显示代码纯文本
#include<bits/stdc++.h>
#define double long double
#define ll long long
#define pir pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
inline int re()
{
    int f=1,num=0;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
    return num*f;
}
int T;
void clear();
const int N=25,M=2000010;
double a[M];
int n;
void work()
{
    clear();
    n=re();n=(1<<n);
    for(int i=0;i<n;i++) scanf("%Lf",&a[i]);
    for(int len=1;len<n;len<<=1)
        for(int p=0;p<n;p+=len+len)
            for(int l=p;l<p+len;l++)
                a[l+len]+=a[l];
    double ans=0;
    for(int i=1;i<n;i++)
    {
        if(abs(1-a[(n-1)^i])<1e-8)
        {
            printf("INF\n");
            return;
        }
        double f;
        if(__builtin_popcount(i)&1) f=1;
        else f=-1;
        f*=1/(1-a[(n-1)^i]);
        ans+=f;
    }
    printf("%.10Lf\n",ans);
    return;
}
int main()
{
    freopen("haoi2015_set.in","r",stdin);
    freopen("haoi2015_set.out","w",stdout);
    T=1;
    while(T--) work();
    return 0;
}
void clear()
{
    return;
}