Min-Max容斥 + 数学技巧 + 位运算卷积优化
题目描述
刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or)操作。
选择数字i的概率是p[i]。保证0<=p[i]<=1,Σp[i]=1问期望多少秒后,你手上的数字变成2^n-1。
输入格式
第一行输入n表示n个元素,第二行输入2^n个数,第i个数表示选到i-1的概率
输出格式
仅输出一个数表示答案,绝对误差或相对误差不超过1e-6即可算通过。如果无解则要输出INF
Inputs and Outputs examples
Inputs’ e.g. #1
1 | 2 |
Outputs’ e.g. #1
1 | 2.6666666667 |
数据范围
对于100%的数据,n<=20
分析
先扯几句没啥关系的事.
没错,这个写题解的菜鸡就是某假人博客上那个00:00装13切黑题然后赖床到八点的女孩子
不扯了………
我们发现或运算在进行的时候对于一个数的每一位都是独立的.
那么我们分开来考虑每一位.
我们设$a_i$表示第$i$位变成$1$的时间.
那么我们要求的是$E(\max({\rm U})) \quad{\rm U}\text{为解的全集}$.
根据Min-Max
容斥,我们只要求出$E(\min({\rm U}))$就能算出答案了,那么考虑设$P(S)$表示选中集合$S$的概率,$P’(S)$表示选中$S$的子集的概率.
设事件$A = [\min(S) = k]$,那么
$$P(A) = P’(\complement_US) ^ {k-1} (1 - P’(\complement_US))$$
这个式子是说,$P(A)$就是:我们前$k-1$选取了$S$的补集的子集,最后一次不能选$S$的补集的子集的概率之积
那么考虑枚举$k$,就可以得到:
$$E(\min(S)) = \sum_{k=1}^\infty kP(A) = \sum_{k=1}^\infty k \times P’(\complement_US) ^ {k-1} (1 - P’(\complement_US))$$
设$p = P’(\complement_US)$,那么原式:
$$(1 - p)\sum_{k=1}^\infty k \cdot p^{k-1}$$
我们发现后面的式子显然是个等差*等比数列求和形式,考虑错位相减法.
设数列$T = \left( 1 \times 1, 2 \times p, 3 \times p^2, 4 \times p^3 \dots k \times p^{k-1} \dots \right)$
那么${\rm Sum}_T = 1 \times 1 + 2 \times p + 3 \times p^2 + 4 \times p^3 + \dots + k \times p^{k-1} \dots $
等式两边乘一个$p$,那么:
$$p \times {\rm Sum}_T = 1 \times p + 2 \times p^2 + 3 \times p^3 + 4 \times p^4 + \dots + k \times p^{k} \dots$$
两式相减可得:
$$(1 - p){\rm Sum_T} = \lim_{n \to \infty} \frac{1-p^n}{1-p} = \frac {1}{1-p}$$
$$E(\min(S)) = \frac {1}{1 - P’(\complement_US)}$$
我们的目的是求出所有的$E(\min(S))$,那么考虑求出所有的$P’(S)$.
根据初中概率知识,有:
$$P’(S) = \sum_{W \subseteq S} P(W)$$
即枚举子集,这时直接FWT
位运算卷积优化即可.
代码
1 | /* Headers */ |