【题解】开关

\(\texttt{ZJOI2019 }\text{开关}\)

我们记输入的刻画概率的数组为 \(p'\) ,并假定对应的 \(p\) 为按哪个开关的概率,即 \(\sum_{i=1}^np_i=1\) 。考虑期望dp,\(state\) 是被打开的开关的序号组成的集合,全集 \(U\) 即所有序号组成的集合,记 \(dp_{state}\) 代表开门状态为 \(state\) 时的期望步数(注意此处 \(dp\) 其实是和题目中给出的开门状态是无关的,并非递推以求得 \(dp_s\))。\(state\not=\varnothing\) 时,有方程

\[dp_{state}=1+\sum\limits_{i=1}^np_idp_{state\otimes\{i\}} \]

显然,其实是有 \(dp_{\varnothing}=0\) 的。所以,记对称差卷积为 \(*\) ,集合生成函数 \(P(z)=\sum_{i=1}^np_iz^{\{i\}}\),有

\[DP=\sum\limits_{T\in 2^U}z^T+P*DP-(1+\sum\limits_{i=1}^np_idp_{\{i\}})z^{\varnothing} \]

事实上我们可以把 \(-(1+\sum_{i=1}^np_idp_{\{i\}})\) 当作一个待定系数 \(c\) 去求解。即

\[DP=\sum\limits_{T\in 2^U}z^T+P*DP+cz^{\varnothing} \]

作沃尔什变换,则

\[[z^S]\hat{DP}=\sum\limits_{T\in 2^U}(-1)^{|T\cap S|}+[z^S]\hat P [z^S]\hat {DP} +c \]

事实上,\([z^S]\hat P\) 是容易考虑的,不难得知 \([z^S]\hat P=\sum_{i=1}^n(-1)^{|\{i\}\cap S|}p_i=1-2\sum_{i\in S}p_i\) ,而 \(\sum_{T\in 2^U}(-1)^{|T\cap S|}=[S=\varnothing]2^n\) ,所以取 \(S=\varnothing\) ,便解得 \(c=-2^n\)

所以,\(S\not=\varnothing\) 时有

\[[z^S]\hat{DP}=\frac{-2^n}{1-[z^S]\hat{P}}=\frac{-2^n}{2\sum_{i\in S}p_i} \]

再考虑逆沃尔什变换,则

\[[z^S]DP=\frac{1}{2^n}\sum\limits_{T\in 2^{U}}(-1)^{|T\cap S|}[z^T]\hat{DP}=\frac{[z^{\varnothing}]\hat{DP}}{2^n}+\sum\limits_{T\not= \varnothing}(-1)^{|T\cap S|}\frac{-1}{2\sum_{i\in S}p_i} \]

注意到 \([z^{\varnothing}]DP=0\) ,解得

\[\frac{[z^{\varnothing}]\hat{DP}}{2^n}=\sum\limits_{T\not= \varnothing}\frac{1}{2\sum_{i\in S}p_i} \]

于是

\[[z^S]DP=\sum\limits_{T\not= \varnothing}[|T\cap S|\equiv 1\mod 2]\frac{\sum_{i=1}^np'_i}{\sum_{i\in S}p'_i} \text{ ,注意此处我们将} p_i \text{还原成了输入给出的正整数形式}p'_i \]

跑个简单的背包即可,状态(考虑前几个,\(|T\cap S|\) 的奇偶性,分母)代表该分母的贡献,第一维可以滚掉。注意到 \(\sum_{i=1}^np'_i\) 的值域远小于模数,所以不难证明,通分后分母不会是模数的倍数,同时直接求逆元乘到分子上和约分掉再乘结果是一样的。把 \(\sum_{i=1}^np'_i\)​ 内的全部数的逆元线性预处理出来本题就完成了。

\(\square\)

posted @ 2021-07-01 16:42  gsj_z  阅读(103)  评论(0)    收藏  举报