zoukankan      html  css  js  c++  java
  • 「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

  • 相关阅读:
    集合
    元组 与 字典
    列表
    练习题
    字符串的类型补充
    3月19号练习题及作业
    变量,用户交互的补充内容,以及数据内容
    Python 入门
    计算机基础
    决策树的概念及其训练
  • 原文地址:https://www.cnblogs.com/realSpongeBob/p/ZJOI2019D2T1.html
Copyright © 2011-2022 走看看