「ZJOI2019」开关

题目链接

(f_S) 表示第一次到达 (S) 状态的期望步数,(p_{{i}}) 表示将当前状态异或上 ({i}) 的概率,则有:

[egin {align*} f_{emptyset} & = 0 \ f_S & = 1 +sum_{jigoplus k}f_jp_k \ end {align*} ]

(hat{f}) 表示 (f)(operatorname{FWT}) 结果,其余同理,则有:

[hat{f}=hat{I}+hat{f}hat{p}+c ]

其中,(I=sum_S x^S)(c) 是一个用于修正 (f_{emptyset}) 的常数。
移项,得:

[hat{f}_S(1-hat{p}_S) = hat{I}_S+c ]

注意到 (hat{p}_{emptyset} = 1, hat{I}_{emptyset}=2^n),故 (c = -2^n)。且 (forall S eqemptyset),有 (hat{p}_S < 1),故:

[egin {align*} hat{f}_S & = frac {-2^n}{1-hat{p}_S} \ & = frac {-2^n}{1-sum_That{p}_Tleft(-1 ight)^{|Scap T|}} \ & = frac {-2^n}{2sum_{iin S}p_i} end{align*} ]

把答案手动 (operatorname {IFWT}) 回去,有:

[egin {align*} f_S & = frac 1{2^n}sum_Tleft(-1 ight)^{|Scap T|}hat{f}_T \ & = frac {hat{f}_{emptyset}}{2^n} - sum_{T eqemptyset}left(-1 ight)^{|Scap T|}frac 1{2sum_{iin T}p_i} end{align*} ]

(f_{emptyset}=frac 1{2^n}sum_T hat{f}_T=0)(hat{f}_{emptyset}=-sum_{T eqemptyset}hat{f}_T),代入化简,得:

[egin {align*} f_S & = sum_{T eqemptyset}left(1-left(-1 ight)^{|Scap T|} ight)frac 1{2sum_{iin T}p_i} \ & = sum_{T eqemptyset}frac{[|Scap T|mod 2=1]}{sum_{iin T}p_i}\ end {align*} ]

注意到 (sum p) 很小,直接大力 dp 就好了,复杂度 (operatorname O(nsum p))

可以使用多项式技巧继续优化,在本题中没有必要。

Code

原文地址:https://www.cnblogs.com/realSpongeBob/p/ZJOI2019D2T1.html