[洛谷P3175][HAOI2015]按位或
题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^n-1}p_i=1$。然后$x\to x|y$,问期望多少时间后,$x=2^n-1$
题解:$Min-Max$容斥
$$
\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\min(T)\\
\min(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\max(T)
$$
而且,它在期望下成立,即:
$$
E(\max(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}E(\min(T))\\
E(\min(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}E(\max(T))
$$
这道题相当于求$E(\max(S))$,也就是说,现在需要求$E(\min(S))$。令$s(S)$表示随机出来的数$y\in S$的概率,即$\sum\limits_{y\in S}p_y$,这可以用$FWT$解决。
求$E(\min(S))$,就枚举选了多少次数与$S$都没有交
$$
\begin{align*}
E(\min(S))&=\sum\limits_{i=0}^{\infty}s(\bar S)^i(i+1)(1-s(\bar S))\\
&=(1-s(\bar S))\dfrac1{(1-s(\bar S))^2}\\
&=\dfrac1{1-s(\bar S)}
\end{align*}
$$
然后$Min-Max$容斥一下就好了
卡点:无
C++ Code:
#include <algorithm>
#include <cstdio>
#define N 1048576 | 3 int lim, U;
void FWT(double *A) {
for (int mid = 1; mid < lim; mid <<= 1)
for (int i = 0; i < lim; i += mid << 1)
for (int j = 0; j < mid; ++j) A[i + j + mid] += A[i + j];
} int n;
double p[N], s[N], f[N];
int main() {
scanf("%d", &n); lim = 1 << n, U = lim - 1;
for (int i = 0; i < lim; ++i) scanf("%lf", p + i);
std::copy(p, p + lim, s);
FWT(s);
for (int i = 0; i < lim - 1; ++i) if (s[i] == 1) {
puts("INF");
return 0;
}
for (int i = 1; i < lim; ++i) f[i] = 1 / (1. - s[U ^ i]); double ans = 0;
for (int i = 1; i < lim; ++i) {
if (__builtin_popcount(i) & 1) ans += f[i];
else ans -= f[i];
}
printf("%.6lf\n", ans);
return 0;
}
[洛谷P3175][HAOI2015]按位或的更多相关文章
- 洛谷 P3175 [HAOI2015]按位或
题目分析 与hdu4336 Card Collector相似,使用min-max容斥. 设\(\max(S)\)表示集合\(S\)中最后一位出现的期望时间. 设\(\min(S)\)表示集合\(S\) ...
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- bzoj4036 / P3175 [HAOI2015]按位或
bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...
- BZOJ4033或洛谷3177 [HAOI2015]树上染色
BZOJ原题链接 洛谷原题链接 很明显的树形\(DP\). 因为记录每个点的贡献很难,所以我们可以统计每条边的贡献. 对于每一条边,设边一侧的黑点有\(B_x\)个,白点有\(W_x\),另一侧黑点有 ...
- 洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
P3178 [HAOI2015]树上操作 题目链接:https://www.luogu.org/problemnew/show/P3178 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边 ...
- 洛谷P3178 [HAOI2015]树上操作
题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 ...
- luogu P3175 [HAOI2015]按位或
传送门 如果每个位置上的数字的意义是这个位置被加进集合的最早时间,那么我们要求的就是集合中最大数的期望,使用Min-Max容斥,\(E(max(S))=\sum_{T\subset S}(-1)^{| ...
- P3175 [HAOI2015]按位或
传送门 一如既往膜拜shadowice巨巨 前置姿势我就没一个会的-- //minamoto #include<bits/stdc++.h> #define R register #def ...
- 洛谷 P3177 [HAOI2015]树上染色
题目链接 题目描述 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0~ N\) 之内的正整数 \(K\) ,你要在这棵树中选择 \(K\)个点,将其染成黑色,并将其他 的\(N-K\)个 ...
随机推荐
- python爬虫之解析库正则表达式
上次说到了requests库的获取,然而这只是开始,你获取了网页的源代码,但是这并不是我们的目的,我们的目的是解析链接里面的信息,比如各种属性 @href @class span 抑或是p节点里 ...
- yocto-sumo源码解析(九): ProcessServer.main
前面讲到BitbakeServer实际上是一个ProcessServer,因此对ProcessServer进行了一个大略的分析集,这里着重再介绍一下ProcessServer.main. 1. 初始化 ...
- PHP.ini 能不能加载子配置文件 ?
答案是不能,php这个地方用的是另一个方案解决的 编译的时候 用这个参数 --with-config-file-scan-dir指定一个目录 然后在这个目录里面加载ini https://www. ...
- __construct 与 __destruct 区别
其实这个问法是有问题的,__construct 与 __destruct 没什么可比性,两个方法一个在对象被创建的时候触发,另一个在对象被销毁的时候触发 具体可以翻阅PHP官方手册中的 http:// ...
- lspci命令详解
基础命令学习目录首页 最近经常用到 lspci -nn | grep Eth 命令,需要学习下PCI总线,找到一篇文章,虽然也是转载,但写的较清晰,再次转载下. http://blog.csdn.ne ...
- 随手记录-linux-vim使用
- 在Gulp中使用BrowserSync
博客已迁移至http://zlwis.me. 很早就听说过BrowserSync,也看过一些相关文章,可就是没用过.之前一直在用Gulp开发项目,每次编写完Sass后还要用按F5刷新页面看效果,想想也 ...
- 使用sqlyog创建数据库的错误
1.错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL s ...
- 《Spring2之站立会议7》
<Spring2之站立会议7> 昨天,查相关资料解决debug:: 今天,解决了debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.
- 第一个spring冲刺总结
讨论成员:罗凯旋.罗林杰.吴伟锋.黎文衷 第一阶段总体是做到了运算的功能,只是一些基本的功能实现,包括APP进入动画,以及界面的基本效果设计,还有核心算法已经实现(可以计算括号 乘除法等等)“: 燃尽 ...