按位或:多项式,FWT,min-max容斥
Description:
刚开始你有一个数字0,每一秒钟你会随机选择一个$[0,2^n)$的数字,与你手上的数字进行或(C++, C 的
|, Pascal 的or)操作。选择数字i的概率是$p_i$ (保证$p \le p_i \le 1$,$\sum p_i =1$ )问期望多少秒后,你手上的数字变成$2^n-1$。($n \le 20$)
日常:想->问NC大聚聚这题有什么新知识点->学知识点->做->调。。。
全是新知识点,难度也都不低。一个知识点一道题也不知道自己是不是记住了。。。
最近写博客,基本每新写一道题的题解,就要新建至少一个Tag。。。
扯远了。
既然题目里都或起来了,那么就不难想到FWT。
但是连式子都没有FWT干什么啊???
然而关于集合期望这类题貌似是有一个套路的,就是min-max容斥。
min-max容斥的基本形式是:$max(S)=\sum\limits_{\phi \neq T \subseteq S} (-1)^{|T|+1} min(T)$
而且还满足于期望。即在min与max外套上一个E()依旧成立
这里的max是指在某一特定排序规则下,S集合中最大的元素。这种大小排序规则可以自己规定,只要有确定的大小关系可以用大小于号给所有元素排列就好。
把min和max倒置结果也是成立的。很好说,因为大小关系是可以你自己来定义的,你只要把关系反过来min和max就反过来了。
min-max容斥的神奇之处在于,它把求最大值与最小值之间进行了转换,当其中一者难求而另一种好求的时候,就可以进行转换。
对于这道题目,我们要求的是「全集的最后一个选中的元素」。直接求不能求,所以换求法。
设max(S)表示S集合中出现的最晚的元素出现的时间,min反之。
那么就能得到$max(2^n-1)=\sum\limits_{i=1}^{2^n-1} min(i) \times (-1)^{cntbit(i)+1}$
大多数题目里求出min要比求出max要简单。考虑一下怎么求:
现在我们要求的min(S)就表示期望抓几次能抓到S中含有的至少一个元素。
这不太好想,所谓正难则反,那么我们求期望连续抓几次都不包含T内的元素。这里的T是上面的S的补集。
这样的话要好求一些。根据数学期望知识我们知道,如果抓到T集合及其子集的概率是p,那么期望连续次数就是$\frac{1}{i-p}$(包含断掉之后的那一下)
现在的问题就在于怎么求出一个集合和它所有的子集的总概率。
然后我也不知道怎么想到的我只知道LNC特别巨,你既然是在学FWT你就试试FWT呗。
然后你就发现对原数列进行一次FWT所得到的新的数列的含义就是每个集合及其所有子集的和。
然后。。。就没了。。。
#include<cstdio>
double p[<<],ans;int n,lb[<<];
main(){
scanf("%d",&n);lb[]=;
for(int i=;i<<<n;++i)scanf("%lf",&p[i]),lb[i]=-lb[i^i&-i];
for(int m=;m<<<n;m<<=)for(int i=;i<<<n;i+=m<<)for(int j=i;j<m+i;++j)p[m+j]+=p[j];
for(int i=;i<<<n;++i)ans+=/(+1e--p[i^(<<n)-])*lb[i];printf(ans>1e13?"INF":"%lf\n",ans);
}
一道神奇的代码只有343B的黑题
按位或:多项式,FWT,min-max容斥的更多相关文章
- bzoj4036 [HAOI2015]按位或 状压DP + MinMax 容斥
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4036 题解 变成 \(2^n-1\) 的意思显然就是每一个数位都出现了. 那么通过 MinMa ...
- Min-max 容斥与 kth 容斥
期望的线性性: \[E(x+y)=E(x)+E(y) \] 证明: \[E(x+y)=\sum_i \sum_j(i+j)*P(i=x,j=y) \] \[=\sum_i\sum_ji*P(i=x,j ...
- min-max 容斥
$\min - \max$ 容斥 Part 1 对于简单的$\min - \max$容斥有一般形式,表达为:$\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|-1 ...
- [HAOI2015]按位或(min-max容斥,FWT,FMT)
题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...
- 【BZOJ4036】按位或(Min-Max容斥,FWT)
[BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...
- BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】
题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...
- bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】
其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...
- P3175-[HAOI2015]按位或【min-max容斥,FWT】
正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个\(n\)位二进制数\(s=0\),每次有\(p_i\)概率选取数字\(i\)让\(s ...
- min-max容斥 hdu 4336 && [BZOJ4036] 按位或
题解: 之前听说过这个东西但没有学 令$max(S)$表示S中编号最大的元素,$min(S)$表示编号中最小的元素 $$max(S)=\sum{T \in S} {(-1)}^{|T|+1} min( ...
随机推荐
- Python3 网络编程小练习
三次握手.四次挥手图示意图 基于TCP开发一款远程cmd程序 # server.py import socket import subprocess server = socket.socket() ...
- 【JS】370- 总结异步编程的六种方式
点击上方"前端自习课"关注,学习起来~ 作者:Aima https://segmentfault.com/a/1190000019188824 众所周知 JavaScript 是 ...
- 【Vuejs】350- 学习 Vue 源码的必要知识储备
前言 我最近在写 Vue 进阶的内容.在这个过程中,有些人问我看 Vue 源码需要有哪些准备吗?所以也就有了这篇计划之外的文章. 当你想学习 Vue 源码的时候,需要有扎实的 JavaScript 基 ...
- 【MyBatis-Plus】使用学习
[MyBatis-Plus]使用学习 ============================================== 1.插入和更新字段空和非空控制 2.插入和更新字段填充策略 ==== ...
- 来看下,C# WebService WSDL自动生成代码,数组参数的BUG。。。ArrayOfString
ArrayOfString ArrayOfString ArrayOfString 解决C#客户端 ArrayOfString 参数问题.(希望搜索引擎能搜到,帮你解决神奇的ArrayOfString ...
- wc命令统计目录下所有文件行数
想统计一下最近一个项目的代码行数,一个一个文件统计显然不是程序员的思维,wc命令可以统计一个文本的行数,结合find命令可以实现我的需求(注意符号):
- 《Java基础知识》Java静态内部类、匿名内部类、成员式内部类和局部内部类
内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法 ...
- 因特尔CPU上TM和R标识的区别
TM是英文trademark的缩写,TM标志并非对商标起到保护作用,它与R不同,TM表示的是该商标已经向国家商标局提出申请,并且国家商标局也已经下发了<受理通知书>,进入了异议期,这样就可 ...
- UiPath Read CSV 中文乱码
问题:UiPath 读取.CSV文件时,出现中文乱码. 解决1: 修改CSV文件的编码为UTF-8 解决2: 设置Read CSV Activity的 encoding属性为csv相应的编码格式 参考 ...
- NGUI 源码分析- AnchorPoint
AnchorPoint 是 UIRect 的一个内部类,此处规定作为基准的那个对象称为锚点对象,基准对象对应的矩形框称为目标框,当前对象对应的矩形框称为源框. public class AnchorP ...