全部评论 2

  • #include<bits/stdc++.h>
    using namespace std;const int N=1048580;typedef double db;db eps=1e-10;int n;db a[N];db res;int up;int siz[N];int main(){scanf("%d",&n);up=(1<<n);for(int i=0;i<up;i++)scanf("%lf",&a[i]);for(int k=1;k<up;k<<=1)for(int s=0;s<up;s+=k<<1)for(int i=s;i<s+k;i++){db a0=a[i];db a1=a[i+k];a[i]=a0;a[i+k]=a0+a1;}for(int i=1;i<up;i++){siz[i]+=siz[i>>1]+(i&1);}for(int i=1;i<up;i++){if(1-a[(up-1)^i]<eps){printf("INF\n");return 0;}db ex=1/(1-a[(up-1)^i]);if(siz[i]%2){res+=ex;}else {res-=ex;}}printf("%.10lf",res);return 0;}
    

    5天前 来自 广东

    0
  • #include<bits/stdc++.h>
    using namespace std;
    const int N=1048580;
    typedef double db;
    db eps=1e-10,a[N],res;
    int n,up,siz[N];
    int main(){
        scanf("%d",&n);up=(1<<n);
        for(int i=0;i<up;i++)scanf("%lf",&a[i]);
        for(int k=1;k<up;k<<=1)
        for(int s=0;s<up;s+=k<<1)
        for(int i=s;i<s+k;i++){
            db a0=a[i];
            db a1=a[i+k];
            a[i]=a0;
            a[i+k]=a0+a1;
        }
        for(int i=1;i<up;i++){
            siz[i]+=siz[i>>1]+(i&1);
        }
        for(int i=1;i<up;i++){
            if(1-a[(up-1)^i]<eps){
                printf("INF\n");
                return 0;
            }
            db ex=1/(1-a[(up-1)^i]);
            if(siz[i]%2){
                res+=ex;
            }else{
                res-=ex;
            }
        }
        printf("%.10lf",res);
        return 0;
    }
    

    加缩进的

    2025-08-25 来自 北京

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页