[luogu 3175] [HAOI2015]按位或

题面

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

分析

前置知识:min-max容斥

记\(\max(S)\)为集合\(S\)中的最大值,\(\min(S)\)为集合\(S\)中的最小值(如果\(S=\emptyset\)

,那\(\max(S)=\min(S)=0\)),那么有

\[\max(S)=\sum _{T\subseteq S}\left( -1\right) ^{|T|-1} \min(T)
\]

这里感性理解一下就好了

前置知识:高维前缀和

戳这里


把二进制数看成一个集合,第i位为1表示集合里有元素i.设全集\(U\)为二进制数\(2^n-1\)对应的集合

设\(\max(S)\)为S中最后一个元素被或为1的期望时间,min就是最先被或为1的元素的期望时间,那么答案就是\(\max(U)\)

根据min-max容斥,我们有

\[\max(S)=\sum_{T \subseteq S} (-1)^{|T|-1} \min(T)
\]

因为是最先被或为1,根据定义我们有

\[\min(T)=\frac{1}{\sum_{X \subseteq U , X \cap T \neq \emptyset }p(x)}
\]

那么

\[\begin{aligned} \min(T) &= \frac{1}{\sum_{X \subseteq U , X \cap T \neq \emptyset }p(x)} \\ &=\frac{1}{1-\sum_{X \subseteq U,X \cap T = \emptyset} p(x)} \\&= \frac{1}{1-\sum_{X \subseteq U-T} p(x)}\end{aligned}
\]

其实就是用了2次补集转化,然后\(\sum_{X \subseteq U-T} p(x)\)显然就是一个高维前缀和,直接套模板就可以了

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define maxn 20
#define eps 1e-10
using namespace std;
int n;
double p[(1<<maxn)+5]; int count_1(int x){
int ans=0;
while(x){
if(x&1) ans++;
x>>=1;
}
return ans;
} int main(){
scanf("%d",&n);
for(int i=0;i<(1<<n);i++) scanf("%lf",&p[i]);
for(int i=0;i<n;i++){
for(int j=0;j<(1<<n);j++){
if(j&(1<<i)) p[j]+=p[j^(1<<i)];
}
}
double ans=0;
int all=(1<<n)-1;
for(int i=1;i<=all;i++){
if(fabs(1-p[all^i])<eps) continue;//防止除0错误
ans+=pow(-1,count_1(i)-1)*1/(1-p[all^i]);
}
if(fabs(ans)<eps) printf("INF");
else printf("%.10lf",ans);
}

[luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)的更多相关文章

  1. BZOJ4036:按位或 (min_max容斥&高维前缀和)

    Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal 的or)操作.选择数字i的概率是p[i].保证0&l ...

  2. [HAOI2015]按位或(min-max容斥,FWT,FMT)

    题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...

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

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

  4. BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】

    题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...

  5. bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】

    其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...

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

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

  7. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...

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

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

  9. luogu P3175 [HAOI2015]按位或

    传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...

随机推荐

  1. IE8 浏览器文本模式变为杂项(quirks)页面变形的解决方法

    IE8 浏览器文本模式(document.documentMode)变为杂项(quirks)页面变形的解决方法. 正常情况下 document.documentMode 输出为8,而变为杂项之后doc ...

  2. TensorFlow使用记录 (二): 理解tf.nn.conv2d方法

    方法定义 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_format="NHWC&quo ...

  3. [转载]深入理解iostat

    深入理解iostat 前言 iostat算是比较重要的查看块设备运行状态的工具,相信大多数使用Linux的同学都用过这个工具,或者听说过这个工具.但是对于这个工具,引起的误解也是最多的,大多数人对这个 ...

  4. centOS7安装docker遇到 [Errno 14] curl#35 - "TCP connection reset by peer问题解决

    ---------------------------------------------------------------------------------------------------- ...

  5. python学习之路(2)(渗透信息收集)

    scapy的用法 通过目标ip的回复判断目标ip主机的情况 先写上三层的IP 四层的TCP 然后r.display看一下我们的包 src是源ip dst是目标ip 我们添加目标ip 这里是网关的ip ...

  6. [JZOJ6400]:Game(贪心+线段树+二分)

    题目描述 小$A$和小$B$在玩一个游戏,他们两个人每人有$n$张牌,每张牌有一个点数,并且在接下来的$n$个回合中每回合他们两人会分别打出手中的一张牌,点数严格更高的一方得一分,然而现在小$A$通过 ...

  7. 第三周课程总结&实验报告

    课程总结 在这周对Java进行了更深层次的学习,Java的学习也变得越来越困难而有趣,加入了一些新的构造新的方法,还学习了一些简化代码的方式. 面向对象的基本概念 对于面向对象的程序设计有三个主要特征 ...

  8. Arrays类与Collections类

    java.util.Arrays类包含一个静态的工厂,允许数组被视为列表.以下是关于数组的要点: 这个类包含了各种方法来操作数组(比如排序和搜索). 在这个类中的方法抛出NullPointerExce ...

  9. 12个Sublime Text应用技巧[转载]

    本文为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text选择文本的快捷键 ...

  10. ColorPicker 颜色选择器

    用于颜色选择,支持多种格式. 基础用法 使用 v-model 与 Vue 实例中的一个变量进行双向绑定,绑定的变量需要是字符串类型. <div class="block"&g ...