Codeforces Round #688(Div 2) D. Checkpoints

幽靈軒發表於2020-12-12

題目連結:https://codeforces.com/contest/1453/problem/D

思路

第一步,先推導1,0,0,……,0,就是1後面跟了n-1個0的時候
所需要的期望步數

封閉式推導

\(f_n\)代表從n關開始直接通關需要的步數的期望
n為1的情況,即就只有一個1
\(f_1=\cfrac{1}{2} \times 1+\cfrac{1}{2} \times (f_1+1)\)
整理得\(f_1=2\)
第一關時,你有一半的概率通關,有一半的概率回到自身重新開始
n為2的情況,1,0
\(f_1=\cfrac{1}{2} \times(f_1+1)+\cfrac{1}{2} \times (f_2+1)\)
\(f_2=\cfrac{1}{2} \times 1+\cfrac{1}{2} \times (f_1+1)\)
整理得\(f_1=6\)
第一關時,你有一半的概率到達第二關,有一半的概率回到自身重新開始
第二關時,你有一半的概率通關,有一半的概率回到第一關重新開始
這樣我們就可以進行歸納總結
把每個式子化簡一下
\(f_1=\cfrac{1}{2} f_1+\cfrac{1}{2} f_2+1\)
\(f_2=\cfrac{1}{2} f_1+\cfrac{1}{2} f_3+1\)
\(f_3=\cfrac{1}{2} f_1+\cfrac{1}{2} f_4+1\)
……
\(f_i=\cfrac{1}{2} f_1+\cfrac{1}{2} f_{i+1}+1\)
……
\(f_n=\cfrac{1}{2} f_1+1\)
然後自己整理一下,就是兩個等比數列的和
就得到了\(f_1\)的封閉式
對於任意情況的n時,\(f_1=2^{n+1}-2\)

思路推進

推匯出1,……,0,0的期望公式之後,我們如果再後面繼續新增1,0,……,0這樣一個序列
那麼他的期望是直接相加的,因為他是一個復活點(檢查點),跟你前面的序列一點關係都沒有
所以你無論怎麼增加都是一個2的倍數,這樣也就得到奇數的時候是無解的

程式碼實現

相關文章