按位或
题目链接:luogu P3175
题目大意
有一个数 0 你一开始,然后每次你可以与上一个数 0~2^n-1 中的,每个数有它被你选择的概率。
然后问你期望要弄多少次才能使得这个数变成 2^n-1。
思路
首先这个弄成 2 n − 1 2^n-1 2n−1 显然不好弄,我们考虑一个神奇的东西,就是 min-max 容斥。
因为这个 min , max \min,\max min,max 它不一定要是最大值最小值,它可以是最早出现最晚出现之类的。
所以我们可以视作最后一次操作让 2 n − 1 2^n-1 2n−1 完成是最晚出现,那最早出现就是第一次开始拼 2 n − 1 2^n-1 2n−1。
那再看回去 min-max 容斥的式子: max ( T ) = ∑ T ⊂ S ( − 1 ) ∣ S ∣ min ( S ) \max(T)=\sum\limits_{T\subset S}(-1)^{|S|}\min(S) max(T)=T⊂S∑(−1)∣S∣min(S)
那我们就要求出每个子集第一次被覆盖到的期望时间,设为 f ( S ) f(S) f(S)。
考虑生成函数,对于每次如果覆盖到就结束,没有覆盖到就要继续,然后没有覆盖到相当于覆盖了 S S S</