[ZJOI2019] 開關 (一種擴展性較高的做法)


[ZJOI2019] 開關 (一種擴展性較高的做法)

題意:

有n個開關,一開始狀態都為關閉。每次隨機選出一個開關將其狀態改變,選出第i個開關的概率為${ p_i \over \sum_{i=1}^n p_i} $,求狀態第一次變為s的操作步數。

題解:

考慮先從組合方法入手。
最基本的思路就是枚舉一種必定結束的狀態,但是這樣的狀態不一定合法,因為這個狀態的前綴可能已經結束了,所以我們可以容斥若干個前綴,強制這些前綴已經結束,來算出這個狀態中沒有一個前綴能夠結束的方案數。
當然,在枚舉的過程中,"一種狀態"可以通過枚舉每一個開關的操作次數\(x_i\),再將這些操作次數排列起來,我們枚舉前綴的時候,同樣枚舉每個開關的操作次數,那么我們可以寫出答案的式子:

\[\sum_{x_i} \prod [2|x_i-s_i] \prod q_i^{x_i} \sum_{i=1}^nx_i \sum_{m=0}^{\infty} \sum_{y_{1i};\exists i,y_{1i}>0 } \sum_{y_{2i};\exists i,y_{2i}>0 }... \sum_{y_{mi};\exists i, y_{mi}>0 } \sum_{{z_i};\exists i,z_i>0 }\\ \prod [2|y_{ij}] \prod_{j}[\sum_{i=1}^m y_{ij} +z_i = x_i] (-1)^m {(\sum_{i=1}^m z_i)! \over \prod_{i=1}^n z_i!}\prod_{i=1}^m {(\sum_{j=1}^n y_{ij})! \over \prod_{j=1}^n y_{ij}} \]

\(q_i\)\(p_i \over \sum p_i\)

看起來十分復雜,其實有很多可以化簡的地方,為了保證題解的簡潔性,這里不一一贅述。上述式子最難化簡的莫過於是\(\sum x_i\),這個其實是一個帶權方案數,在算的時候我們可以認為是計算$[y^1]\prod_{i=1}^n (1+x_iy) $,所以只需要記常數項與一次項系數。

用指數型生成函數來表示,可以方便的得到答案式子:

\[F(x)=\prod (e^{q_ix} + q_ixye^{q_ix} +(-1)^{s_i} e^{-q_ix} - (-1)^{s_i} q_i xye^{-q_ix}) \\ =\sum_{i=0}^{\infty} {f_{0i} \over i!}x^i + {f_{1i} \over i!}x^iy \]

\[G(x)=\prod (e^{q_ix} + q_ixye^{q_ix} + e^{-q_ix} - q_i xye^{-q_ix}) \\ =\sum_{i=0}^{\infty}{g_{0i} \over i!}x^i + {g_{1i} \over i!}x^iy\]

\(f_0(x)=\sum_{i=0}^{\infty}f_{0i}x^i,f_1(x)=\sum_{i=0}^{\infty}f_{1i}x^i,f(x)=f_0(x)+f_1(x)y\)
\(g_0(x)=\sum_{i=0}^{\infty}g_{0i} x^i,g_1(x)=\sum_{i=0}^{\infty}g_{1i}x^i,g(x)=g_0(x)+g_1(x)y\)
\(F(x)\)為例,\(F(x)=\sum_{i=- \infty}^{\infty} a_i e^{ix} + b_i xy e^{ix}\)
可以得到\(f(x)=\sum_{i=- \infty}^{\infty} {a_i \over 1-ix}+{b_i x\over (1-ix)^2}\)
答案為

\[\lim_{x \to 1 }[y^1]f(x)\sum_{m=0}^{\infty}(-g(x)+1)^m=\lim_{x \to 1}[y^1]{f(x) \over g(x)}\\ ={f_2(x)g_1(x) -g_2(x)f_1(x) \over g_1^2(x)}\]

我們發現在\(g_1(x)\)中有\(\frac {1} {1-x}\)的項,在\(f_2(x),g_2(x)\)\(\frac {1} {(1-x)^2}\)的項,所以我們發現,答案的分子有三階無窮大的項,分母有二階無窮大的項。
那么是否意味着答案發散呢?恰恰相反,因為感性理解答案肯定是收斂的,所以我們有理由認為分子上三階無窮大的系數為0,而事實也確實如此,因為\(f_2(x)與g_2(x)\)\(1 \over (1-x)^2\)項系數相同,\(f_1(x)與g_1(x)\)\(1 \over 1-x\)項的系數也相同,我們計算答案,只需要計算分子的二階無窮大的值除以分母的二階無窮大的值即可,又因為兩個無窮大都為\({1\over (1-x)^2}\),所以是可以約去的。

這種做法與網上的大致相同,但是在處理\(\sum x_i\)項的時候不太一樣,網上題解大多是用的求導來解決第i項對答案的貢獻為i的問題,而本文觀察到了\(\sum x_i = [y^1]\prod (1+x_iy)\)的性質。這種做法無疑具有比較高的擴展性,例如操作開關i需要\(a_i\)的代價,求代價的期望,求導方法便顯得十分無力,而這個方法只需要將原式稍稍更改成\(\sum a_i x_i = [y^1]\prod (1+a_ix_iy)\)即可。
code












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM