首页 > 其他 > 详细

[BZOJ4036]按位或

时间:2019-09-09 22:50:12      阅读:85      评论:0      收藏:0      [点我收藏+]

传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4036

Sol:

FWT+min-max容斥

#include <bits/stdc++.h>
using namespace std;
int N,cnt[1<<20];
double P[1<<20];
double ans;
int main(){
    scanf("%d",&N);
    N=1<<N;
    for (int i=0;i<N;i++)
        scanf("%lf",&P[i]),cnt[i]=cnt[i>>1]+(i&1);
    for (int i=1;i<N;i<<=1)
            for (int p=i<<1,j=0;j<N;j+=p)
                for (int k=0;k<i;k++)
                    P[i+j+k]+=P[j+k];
    for (int i=1;i<N;i++)
        if (1-P[(N-1)^i]>1e-8) ans+=((cnt[i]&1)?1:-1)/(1-P[(N-1)^i]);
    if (ans<1e-10) cout<<"INF";else
        printf("%.10lf",ans);
}
 

 

[BZOJ4036]按位或

原文:https://www.cnblogs.com/si--nian/p/11494407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!