Description

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

Input

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

Output

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

Sample Input

2
0.250.250.250.25

Sample Output

2.6666666667

HINT

对于100%的数据,n<=20

思路:可以min_max容斥来做,问题的关键就是求出得到所有子集X的期望F(X)就可以了,P(X)的概率为所有对X有贡献的p[x]之和(x是所有和X有交集的x,即便x含有X没有的部分);

我们倒过来求与X交集为空的部分的概率,即M^X的子集的概率,这部分可以用高维前缀和来做。

    for(int i=;i<N;i++)
for(int j=;j<(<<N);j++)
if(j&(<<i)) F[j]+=F[j^(<<i)];
这个代码可以得到子集的前缀和。 复杂度是O(N*^N)

超集的写法:

    for(int i=;i<N;i++)
for(int j=;j<(<<N);j++)
if(!j&(<<i)) F[j]+=F[j|(<<i)];
#include<bits/stdc++.h>
using namespace std;
const int maxn=<<;
double P[maxn],ans;int N,sum,M;
void dfs(int pos,int now,int cnt)
{
if(pos==N){
if(cnt>=){
if(cnt&) ans+=1.0/(1.0-P[(M-)^now]);
else ans-=1.0/(1.0-P[(M-)^now]);
}
return ;
}
dfs(pos+,now|(<<pos),cnt+);
dfs(pos+,now,cnt);
}
int main()
{
scanf("%d",&N); M=<<N;
for(int i=;i<M;i++){
scanf("%lf",&P[i]);
if(P[i]>) sum|=i;
}
if(sum!=M-) return puts("INF"),;
for(int i=;i<N;i++)
for(int j=;j<M;j++)
if(j&(<<i)) P[j]+=P[j^(<<i)];
dfs(,,);
printf("%.6lf\n",ans);
return ;
}
//2 0.25 0.25 0.25 0.25

当然,为1的个数我们也可以预处理出来。就不用DFS了。

#include<bits/stdc++.h>
using namespace std;
const int maxn=<<;
double P[maxn],ans;int N,sum,M,num[maxn];
int main()
{
scanf("%d",&N); M=<<N;
for(int i=;i<M;i++){
scanf("%lf",&P[i]);
if(P[i]>) sum|=i;
}
if(sum!=M-) return puts("INF"),;
for(int i=;i<M;i++) num[i]=num[i>>]+(i&);
for(int i=;i<N;i++)
for(int j=;j<M;j++)
if(j&(<<i)) P[j]+=P[j^(<<i)];
for(int i=;i<M;i++)
ans+=(num[i]&?1.0:-1.0)/(-P[(M-)^i]);
printf("%.6lf\n",ans);
return ;
}
//2 0.25 0.25 0.25 0.25

BZOJ4036:按位或 (min_max容斥&高维前缀和)的更多相关文章

  1. [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)

    [luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...

  2. luoguP3175 [HAOI2015]按位或 min-max容斥 + 高维前缀和

    考虑min-max容斥 \(E[max(S)] = \sum \limits_{T \subset S} min(T)\) \(min(T)\)是可以被表示出来 即所有与\(T\)有交集的数的概率的和 ...

  3. Codeforces.449D.Jzzhu and Numbers(容斥 高维前缀和)

    题目链接 \(Description\) 给定\(n\)个正整数\(a_i\).求有多少个子序列\(a_{i_1},a_{i_2},...,a_{i_k}\),满足\(a_{i_1},a_{i_2}, ...

  4. [Hdu-6053] TrickGCD[容斥,前缀和]

    Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...

  5. 从 0 开始的min_max容斥证明

    二项式反演 \[f_n=\sum\limits_{i=0}^nC^i_ng_i \Leftrightarrow g_n=\sum\limits_{i=0}^n{(-1)}^{n-i}f_i \] 证明 ...

  6. Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望

    传送门 套路题 看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥. 由\(E(max(S)) = \sum\limits ...

  7. bzoj 4036 按位或 —— min-max容斥+FMT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 min-max容斥:https://blog.csdn.net/ez_2016gdgz ...

  8. kth min_max容斥

    题解: 普通的$min-max$容斥是用来求最后出现元素的期望之类的 $kth min-max$容斥进一步解决倒数第k个出现的元素的期望 给出公式: $kthmax(S)=\sum\limits_{T ...

  9. bzoj 4036 [HAOI2015]按位或——min-max容斥+FMT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 题解:https://www.cnblogs.com/Zinn/p/10260126. ...

随机推荐

  1. docker shipyard 问题

    安装 docker  shipyard curl -s https://shipyard-project.com/deploy | bash -s docker machine 创建的虚拟机无法直接运 ...

  2. Glibc-2.3.4编译

    $tar xf Glibc2.3.4.tar.bz2 $mkdir build_glibc $cd build_glibc ../glibc-2.3.4/configure --prefix=/too ...

  3. BZOJ3224 Tyvj 1728 普通平衡树(Treap)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. Vue 备

    <div id="app"> <span :class='{red:addClass}'>jam</span> </div> < ...

  5. 【三小时学会Kubernetes!(一) 】容器简介及为每个服务创建镜像

    容器是什么 Kubernetes 是容器管理平台.可想而知我们需要容器去管理它们.但是容器是什么?Docker 官方文档的最佳答案如下: 容器映像是轻量级的.独立的.可执行软件包,包含所有可运行的东西 ...

  6. angular之自定义管道

    1,装了angular2 的 cli之后,cmd中命令建立个管道文件 ng g p <name>; 如建一个在pipe文件中建一个add.pipe.ts文件 可以这么么写 ng g p p ...

  7. 伪共享(False Sharing)和缓存行(Cache Line)

    转载:https://www.jianshu.com/p/a9b1d32403ea https://www.toutiao.com/a6644375612146319886/ 前言 在上篇介绍Long ...

  8. echarts在miniUI和ajax下动态渲染数据

    <script src="echarts.js"></script> <script src="jquery-3.3.1.min.js&qu ...

  9. Git 从了解到放弃

    1. 简单介绍 1.1. git起源 在1991年linus创建了Linux从此linux成为服务器领域的佼佼者,大部分web服务器.邮件.数据库各种服务器端程序都安装在了linux上面运行,主要是因 ...

  10. Kubernetes 1.5.3 部署

    > kubernetes 1.5.3, 配置文档 # 1 初始化环境 ## 1.1 环境: | 节 点  |      I P      ||--------|-------------||no ...