bzoj 4036 按位或 —— min-max容斥+FMT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036
min-max容斥:https://blog.csdn.net/ez_2016gdgzoi471/article/details/81416333
二项式反演:https://blog.csdn.net/ez_2016gdgzoi471/article/details/81408416
而出现 \( S \) 的期望,就是 \( S \) 每一位出现的期望中的最大值;
所以
\( E(S) = max(S) = \sum\limits_{T \subseteq S} (-1)^{|T|-1} min(T) \)
\( min(T) = \frac{1}{ \sum\limits_{K \cap T \neq \varnothing} p_{K} } \)
\( \sum\limits_{K \cap T \neq \varnothing} p_{K} = 1 - \sum\limits_{k \subseteq C_{U}^{T} } p_{k} \)
求个高维前缀和(FMT)即可。
代码如下:
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define eps 1e-6
- using namespace std;
- typedef double db;
- int const xn=(<<)+;
- int n,bin[];
- bool vis[]; db p[xn],mn[xn];
- int cal(int s){int ret=; while(s)ret+=(s&),s>>=; return ret;}
- void fmt(db *a,int tp)
- {
- for(int d=;d<bin[n];d<<=)
- for(int s=;s<bin[n];s++)
- if(s&d)a[s]+=a[s^d]*tp;
- }
- int main()
- {
- scanf("%d",&n);
- bin[]=; for(int i=;i<=n;i++)bin[i]=(bin[i-]<<);
- for(int i=;i<bin[n];i++)
- {
- scanf("%lf",&p[i]);
- if(p[i]){for(int d=;d<n;d++)if(i&bin[d])vis[d]=;}
- }
- for(int i=;i<n;i++)if(!vis[i]){puts("INF"); return ;}
- fmt(p,);
- for(int s=;s<bin[n];s++)
- if(-p[(bin[n]-)^s]>eps)mn[s]=1.0/(-p[(bin[n]-)^s]);//s=1
- db ans=;
- for(int s=;s<bin[n];s++)ans+=mn[s]*((cal(s)&)?:-);//s=1
- printf("%.10f\n",ans);
- return ;
- }
bzoj 4036 按位或 —— min-max容斥+FMT的更多相关文章
- 【BZOJ4036】按位或(Min-Max容斥,FWT)
[BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...
- bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】
其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...
- [HAOI2015]按位或(min-max容斥,FWT,FMT)
题目链接:洛谷 题目大意:给定正整数 $n$.一开始有一个数字 $0$,然后每一秒,都有 $p_i$ 的概率获得 $i$ 这个数 $(0\le i< 2^n)$.一秒恰好会获得一个数.每获得一个 ...
- BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】
题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...
- P3175-[HAOI2015]按位或【min-max容斥,FWT】
正题 题目链接:https://www.luogu.com.cn/problem/P3175 题目大意 开始有一个\(n\)位二进制数\(s=0\),每次有\(p_i\)概率选取数字\(i\)让\(s ...
- BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)
BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...
- BZOJ 2005 [Noi2010]能量采集 (数学+容斥 或 莫比乌斯反演)
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 4493 Solved: 2695[Submit][Statu ...
- 【BZOJ 3771】 3771: Triple (FFT+容斥)
3771: Triple Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 547 Solved: 307 Description 我们讲一个悲伤的故事. ...
- BZOJ 2301 Problem b (莫比乌斯反演+容斥)
这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ...
随机推荐
- brew || yarn 软件包管理工具
1.brew || yarn 软件包管理工具
- [WinForm]FastColoredTextBox控件(附源码)
Fast Colored TextBox is text editor component for .NET. Allows you to create custom text editor with ...
- C# listview鼠标移动颜色设置问题
private void Listview1_MouseMove(object sender, MouseEventArgs e) { ListView _ListView = (ListView)s ...
- poj3686
题解: KM算法 把每一个点拆成n个 然后改变编圈 代码: #include<cstdio> #include<cmath> #include<cstring> # ...
- springboot jpa 批量保存数据--EntityManager和 JpaRepository
1: 项目里面使用springboo-boot-start-data-jpa操作数据库,通过源码,在repository上继承JpaRepository 可以实现保存操作,其中源码接口为: <S ...
- 第9课:备份mysql数据库、重写父类、unittest框架、多线程
1. 写代码备份mysql数据库: 1)Linux下,备份mysql数据库,在shell下执行命令:mysqldump -uroot -p123456 -A >db_bak.sql即可 impo ...
- Xen,VMware ESXi,Hyper-V和KVM等虚拟化技术的原理解析
Xen,VMware ESXi,Hyper-V和KVM等虚拟化技术的原理解析 2018年04月03日 13:51:55 阅读数:936 XEN 与 VMware ESXi,Hyper-V 以及 K ...
- python marshal 对象序列化和反序列化
有时候,要把内存中的一个对象持久化保存到磁盘上,或者序列化成二进制流通过网络发送到远程主机上.Python中有很多模块提供了序列化与反序列化的功能,如:marshal, pickle, cPickle ...
- Http权威指南(服务器、缓存)
对于web服务器(软件)大家应该不会陌生,常见的web服务器有Apache.IIS.Tomcat.Nginx.Jetty等等. 1.基本功能 几乎所有的web服务器都会执行以下几项同样的任务: 1.建 ...
- [置顶]
如何用PYTHON代码写出音乐
如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深 ...