Description

题库链接

刚开始你有一个数字 \(0\) ,每一秒钟你会随机选择一个 \([0,2^n-1]\) 的数字,与你手上的数字进行或( \(\text{or}\) )操作。选择数字 \(i\) 的概率是 \(p_i\) 。保证 \(0\leq p_i\leq 1\) , \(\sum_{i=0}^{2^n-1}p_i=1\) 。问期望多少秒后,你手上的数字变成 \(2^n-1\) 。

\(1\leq n\leq 20\)

Solution

不妨假设第 \(i\) 秒后状态为 \(S\) 的概率为 \(fp_{i,S}\)

显然 \(i=1\) 时, \(fp_{1,S}=p_S\) 。

注意到 \(fp\) 会满足这样的关系

\[fp_{i,S} = \sum_{L \subseteq S} \sum_{R \subseteq S}^{} [L \cup R = S] fp_{i-1,L} \times p_R\]

记 \(U=2^n-1\) ,于是我们可以得到答案就是

\[\sum_{i=1}^\infty i(fp_{i,U}-fp_{i-1,U})\]

其中 \(fp_{i,U}-fp_{i-1,U}\) 表示恰好第 \(i\) 时变为 \(U\) 的概率。

记 \(FP\) 为 \(fp\) 的莫比乌斯变换,记 \(P\) 为 \(p\) 的莫比乌斯变换。显然 \(FP_{i,S}=P_S^i\) 。

那么对于集合 \(S\) 在莫比乌斯变换下得到的答案就是

\[\begin{aligned}&\sum_{i=1}^\infty i(P_S^i-P_S^{i-1})\\=&\begin{cases}-(P_S^0
+P_S^1+\cdots+P_S^\infty)&P_S<1\\0&P_S=1\end{cases}\\=&\begin{cases}-\frac{1}{1-P_S}&P_S<1\\0&P_S=1\end{cases}\end{aligned}\]

然后再反演回去直接得到答案即可。复杂度 \(O(n2^n)\) 。

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 25, SIZE = (1<<20)+5;
const double eps = 1e-7; int bin[N], n;
double p[SIZE]; void FMT(double *f, int o) {
for (int i = 1; i < bin[n]; i <<= 1)
for (int j = 0; j < bin[n]; j++)
if (i&j) f[j] += f[j^i]*o;
}
void work() {
scanf("%d", &n); bin[0] = 1;
for (int i = 1; i <= n; i++) bin[i] = (bin[i-1]<<1);
for (int i = 0; i < bin[n]; i++) scanf("%lf", &p[i]);
FMT(p, 1);
for (int i = 0; i < bin[n]; i++)
if (fabs(p[i]-1) <= eps) p[i] = 0;
else p[i] = 1./(p[i]-1.);
FMT(p, -1);
p[bin[n]-1] <= eps ? puts("INF") : printf("%.7lf\n", p[bin[n]-1]);
}
int main() {work(); return 0; }

[HAOI 2015]按位或的更多相关文章

  1. 解题:HAOI 2015 按位或

    题面 Min-Max容斥:对于集合S $min(S)=\sum_{s∈S}(-1)^{|s|+1}max(s)$ $max(S)=\sum_{s∈S}(-1)^{|s|+1}min(s)$ 那么这个题 ...

  2. cogs 1963. [HAOI 2015] 树上操作 树链剖分+线段树

    1963. [HAOI 2015] 树上操作 ★★★☆   输入文件:haoi2015_t2.in   输出文件:haoi2015_t2.out   简单对比时间限制:1 s   内存限制:256 M ...

  3. 树上操作[HAOI 2015]

    树链剖分裸题: 树剖点这里:传送门 代码: #include<bits/stdc++.h> #define sight(c) ('0'<=c&&c<='9') ...

  4. [bzoj 4034][HAOI 2015]树上操作

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中 ...

  5. [HAOI 2015]树上染色

    Description 题库链接 给出一棵 \(n\) 个节点的树,边有权值.让你将树上 \(k\) 个点染黑,剩余 \(n-k\) 个点染白.染色后记一种染色方案的价值为黑点间两两距离和以及白点间两 ...

  6. 【HAOI 2015】 树上操作

    [题目链接] 点击打开链接 [算法] 树链剖分 子树的DFS序是连续的一段! [代码] #include<bits/stdc++.h> using namespace std; #defi ...

  7. 洛谷P3178[HAOI]2015 树上操作

    题目 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想. 要注意在区间上连续的节点,一定是在一棵子树中. #include <bits/stdc++.h> #define ...

  8. [总结]其他杂项数学相关(定理&证明&板子)

    目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...

  9. NOI 2015 滞后赛解题报告

    报同步赛的时候出了些意外.于是仅仅能做一做"滞后赛"了2333 DAY1 T1离线+离散化搞,对于相等的部分直接并查集,不等部分查看是否在同一并查集中就可以,code: #incl ...

随机推荐

  1. 深入理解java虚拟机一之走进Java

    Java技术体系 Java程序设计语言.Java虚拟机.Java API类库统称为JDK Java API类库中Java SE API子集和Java虚拟机统称为JRE Java发展史 1991年4月 ...

  2. SQL Server使用证书最小粒度授权

    最近在项目中某个功能遇到了阻塞造成的Time out错误.所以需要在执行该功能的时候开启一个线程检测SQL Server中阻塞会话.但是程序本身使用的sql帐号本身不具备VIEW Sever Stat ...

  3. 理解Time-Wait

    What is it? TIME-WAIT状态的主要作用在于TCP连接的拆除阶段.拆除一个TCP连接通常需要交换4个segment,如下图所示: Host1上的应用程序关闭了自己这一端的连接,使得TC ...

  4. unable to load http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl

    问题:unable to load http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl 解决:yum -y inst ...

  5. 一个可遇不可求的 bug 全局变量初始化顺序问题 哈哈

    这是今天下午帮同事查的一个客户端 C++ 的 bug,前人留下的谜之代码.. 具体情况是,客户端实现了有一个简单的内存池,每次申请内存的时候会把新申请到的内存信息存到一个 map 里,据说是为了检查内 ...

  6. MongoDB 数据库

    数据库: 关系型数据库       mysql           收费        速度快     字段类型 非关系型数据库   MongoDB    不收费    速度慢一些 存储数据都是字符串 ...

  7. SQL注入之重新认识

    i春秋作家:anyedt 原文来自:https://bbs.ichunqiu.com/thread-41701-1-1.html 引言 作为长期占据 OWASP Top 10 首位的注入,认识它掌握它 ...

  8. vsftpd安装配置以及常见问题解决

    vsftpd安装配置以及踩坑解决办法,Centos7 nginx已经配置成功了,但是使用http始终没办法访问到图片,那么你来对地方了(在文章末尾是原因) 配置nginx教程:http://blog. ...

  9. Redis简明教程

    redis是什么: Redis is an open source, BSD licensed, advanced key-value store. It is often referred to a ...

  10. Redis 分布式锁进化史(解读 + 缺陷分析)

    Redis分布式锁进化史 近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布 ...