题目链接

BZOJ4036

题解

好套路的题啊,,,

我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间

显然\(minmax\)容斥

\[E(max\{S\}) = \sum\limits_{T \subseteq S} (-1)^{|T| + 1}E(min\{T\})
\]

那么问题就转化为了求每个集合中最早出现的\(1\)的期望时间

假如在\(k\)时刻出现,那么前\(k - 1\)时刻一定都是取的补集的子集,记\(T\)补集的所有子集概率和为\(P\)

\[E(min\{T\}) = \sum\limits_{k = 1}^{\infty}kP(1 - P)^{k - 1}
\]

是一个离散变量的几何分布

设\(P(x = a) = p\)

那么取到\(a\)的期望为

\[\begin{aligned}
E(x = a) &= \sum\limits_{k = 1}^{\infty}k(1 - p)^{k - 1}p \\
&= p\sum\limits_{k = 1}^{\infty}k(1 - p)^{k - 1}
\end{aligned}
\]

记\(f(x) = 1 + 2x + 3x^2 + 4x^3 + \dots\)

则\(xf(x) = x + 2x^2 + 3x^3 + 4x^4 + \dots\)

则\((1 - x)f(x) = 1 + x + x^2 + x^3 + \dots\)

对于\(0 < x < 1\),\((1 - x)f(x)\)是收敛的,可以取到

\[(1 - x)f(x) = \frac{1}{1 - x}
\]

\[f(x) = \frac{1}{(1 - x)^2}
\]

所以

\[\begin{aligned}
E(x = a) &= p\frac{1}{p^2} \\
&= \frac{1}{p}
\end{aligned}
\]

非常棒

于是有

\[E(min\{T\}) = \frac{1}{1 - P}
\]

我们只需要求出所有集合的子集概率和就好了

其实就是或运算的\(FWT\)

然后就切掉辣

复杂度\(O(n2^n)\)

代码非常短

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = (1 << 20);
int n,N,cnt[maxn];
double p[maxn],ans;
int main(){
scanf("%d",&n); N = (1 << n);
for (int i = 0; i < N; i++) scanf("%lf",&p[i]);
for (int i = 1; i < N; i <<= 1)
for (int j = 0; j < N; j += (i << 1))
for (int k = 0; k < i; k++)
p[j + k + i] += p[j + k];
for (int i = 1; i < N; i++) cnt[i] = cnt[i >> 1] + (i & 1);
for (int i = 1; i < N; i++){
if (1.0 - p[(N - 1) ^ i] < 1e-9){puts("INF"); return 0;}
ans += ((cnt[i] & 1) ? 1.0 : -1.0) * (1.0 / (1 - p[(N - 1) ^ i]));
}
printf("%.9lf\n",ans);
return 0;
}

BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】的更多相关文章

  1. Luogu3175 HAOI2015 按位或 min-max容斥、高维前缀和、期望

    传送门 套路题 看到\(n \leq 20\),又看到我们求的是最后出现的位置出现的时间的期望,也就是集合中最大值的期望,考虑min-max容斥. 由\(E(max(S)) = \sum\limits ...

  2. [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)

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

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

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

  4. bzoj 4036 [HAOI2015]按位或——min-max容斥+FMT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 题解:https://www.cnblogs.com/Zinn/p/10260126. ...

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

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

  6. UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp

    LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...

  7. loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)

    题意 题目链接 Sol 考虑直接对询问的集合做MinMax容斥 设\(f[i][sta]\)表示从\(i\)到集合\(sta\)中任意一点的最小期望步数 按照树上高斯消元的套路,我们可以把转移写成\( ...

  8. bzoj 4036 按位或 —— min-max容斥+FMT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4036 min-max容斥:https://blog.csdn.net/ez_2016gdgz ...

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

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

随机推荐

  1. PHP的学习路线规划

    第一阶段:WEB的快速入门 前期入门学习我们需要学一些HTML+CSS+JS前端的一些技术,这个阶段不需要太深入的学习,学习到可以制作出一个像样点的静态页面就可以了.因为大家是学习PHP,对于新人来说 ...

  2. 高可用注册中心 ->Spring Cloud Eureka

    在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况, 所以在生产 环境中必须对各个组件进行高可用部署, 对于微服务如此, 对于服务注册中心也一样. 但 是到本节为止,我们一直都在使用单节点 ...

  3. 在python脚本中设置环境变量,并运行相关应用

    1. 问题 在自动化应用的时候 ,有时候环境变量与运行需要不一致.这时候有两种选择: 改变节点环境变量,使得其和运行需求保持一致: 在自动化脚本中设置环境变量,其范围只在脚本运行环境中有效. 显然,当 ...

  4. Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程

    Netty源码分析第五章: ByteBuf 第十节: SocketChannel读取数据过程 我们第三章分析过客户端接入的流程, 这一小节带大家剖析客户端发送数据, Server读取数据的流程: 首先 ...

  5. word2vec的理解

    在学习LSTM的时候,了解了word2vec,简单的理解就是把词变成向量.看了很多书,也搜索了很多博客,大多数都是在word2vec的实现原理.数学公式,和一堆怎么样重新写一个word2vec的pyt ...

  6. 字符串匹配:KMP算法, Boyer-Moore算法理解与总结

    1. KMP算法是前缀匹配算法,一次从前往后匹配的过程中,根据已经部分匹配的信息,在文本中,移动尽可能远的距离.而不是按照朴素模式匹配方法,每次都只移动一个位置. 比如这个示例,在文本串中从4(从0开 ...

  7. oracle数据update后怎么恢复到以前的数据

    http://blog.csdn.net/itdada/article/details/52746392

  8. Daily Scrum 11.10

    今日完成任务: 1.加入更改头像功能 2.解决不发送激活邮件和重置密码邮件的问题 3.在服务器上部署网站 4.加入匿名提问功能 明日任务: 黎柱金 修改数据库用户表,实现用户积分管理功能 晏旭瑞 解决 ...

  9. 今日事——Sprint计划会议

    一.   Sprint需求: 解屏提醒部分 界面设计 登录功能 备忘功能 成就系统 二.工作认领: 因有成员请假回家,所以延后认领,目前主要任务是学习如何在andriod平台开发并搭建开发环境. 网上 ...

  10. 深入理解mybatis

    MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...