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 ...
随机推荐
- 你真的掌握 LVS、Nginx 及 HAProxy 的工作原理吗
你真的掌握 LVS.Nginx 及 HAProxy 的工作原理吗 当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web ...
- day6-面向对象基础篇
一.面向对象引子及概念 结合编程的一些理论知识和实践,可以总结出目前存在以下编程模式: 1. 面向过程 按照业务逻辑和实现过程步骤来逐步垒代码,代码编写的逻辑即对应于实际实现的步骤过程,核心是过程两个 ...
- JS中将对象转化为数组
前言 其实这本来应该是一个很基础的问题了,但我之做一想记录一下是因为之前因为对象转数组的时候卡住了后来弄了出来,但最近再遇到这个问题时竟然又卡主了,所以,关于这个问题,如何把一个对象{'未完成':5, ...
- cf 290F. Treeland Tour 最长上升子序列 + 树的回溯 难度:1
F. Treeland Tour time limit per test 5 seconds memory limit per test 256 megabytes input standard in ...
- Linux服务器上安装tomcat
安装软件 : apache-tomcat-9.0.0.M1.tar.gz(下载地址http://tomcat.apache.org/) 步骤一 Tomcat是其中一个开源的且免费的java Web服务 ...
- vim 插件 for gbasic
https://github.com/tracyone/vim-gbasic 功能特点 提供正确语法显示,包括关键字,bulidin函数,注释,强调注释,TODO注释 提供正确的折叠; 准确secti ...
- dilworth定理+属性排序(木棍加工)
P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...
- 疑问:@Autowired的作用?[待解答]
有下面一个Spring的工程,工程结构如下: 代码如下: applicationContext.xml: <?xml version="1.0" encoding=" ...
- 深度学习(六十七)metal forge深度学习库使用
1.设置输入: let input = Input() 或者 let input = Input(width: 100, height: 100, channels: 3) 2.创建网络: let o ...
- Jmter操作数据库
1.导入jdbc的jar包,因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql,如下操作: 2.创建数据库连接如下: 3.配置mysql的url.端口号.账号. ...