2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治
傳送門
文章目錄
- 題意:
- 思路:
題意:
給你一個大輪盤,被分成了nnn個區(qū)域0,1,2,..,n?10,1,2,..,n-10,1,2,..,n?1,每個區(qū)域被轉(zhuǎn)到的概率是ai∑j=0n?1aj\frac{a_i}{\sum_{j=0}^{n-1}a_j}∑j=0n?1?aj?ai??,轉(zhuǎn)到第iii個區(qū)域的時候得分是iii。現(xiàn)在你初始有x=0x=0x=0分,每次轉(zhuǎn)動輪盤假設(shè)得到了yyy分,那么如果x⊕y≤xx\oplus y\le xx⊕y≤x的話,當(dāng)前得分不會變化,否則將x=x⊕yx=x\oplus yx=x⊕y,當(dāng)?shù)梅诌_(dá)到n?1n-1n?1的時候立即停止,問你轉(zhuǎn)轉(zhuǎn)盤輪數(shù)的期望。
2≤n≤2162\le n\le2^{16}2≤n≤216,且nnn為222的冪次。
思路:
以下我們約定:aia_iai?代表得分為iii的概率。
考慮期望dpdpdp,我們這里倒著來推,所以設(shè)f[i]f[i]f[i]表示當(dāng)?shù)梅譃?span id="ozvdkddzhkzd" class="katex--inline">iii的時候還需要進(jìn)行的輪數(shù)期望是多少,很容易就可以得到n2n^2n2的一個轉(zhuǎn)移方程:fi=∑j=0n?1[(i⊕j)>i](fi⊕j+1)?aj+∑j=0n?1[(i⊕j≤i)](fi+1)?ajf_i=\sum_{j=0}^{n-1}[(i\oplus j)>i](f_{i\oplus j}+1)*a_j+\sum_{j=0}^{n-1}[(i\oplus j\le i)](f_i+1)*a_jfi?=j=0∑n?1?[(i⊕j)>i](fi⊕j?+1)?aj?+j=0∑n?1?[(i⊕j≤i)](fi?+1)?aj?
考慮到方程兩邊都有f[i]f[i]f[i],我們進(jìn)行移項:
fi=∑j=0n?1aj+∑j=0n?1[(i⊕j)>i]fi⊕j?aj1?∑j=0n?1[(i⊕j≤i)]ajf_i=\frac{\sum_{j=0}^{n-1}a_j+\sum_{j=0}^{n-1}[(i\oplus j)>i]f_{i\oplus j}*a_j}{1-\sum_{j=0}^{n-1}[(i\oplus j\le i)]a_j}fi?=1?∑j=0n?1?[(i⊕j≤i)]aj?∑j=0n?1?aj?+∑j=0n?1?[(i⊕j)>i]fi⊕j??aj??
這個式子一眼看去只能n2n^2n2求,可以發(fā)現(xiàn)瓶頸就在∑j=0n?1[(i⊕j)>i]fi⊕j?aj\sum_{j=0}^{n-1}[(i\oplus j)>i]f_{i\oplus j}*a_j∑j=0n?1?[(i⊕j)>i]fi⊕j??aj?這個式子上,我們將其化簡一下,設(shè)x=i,y=j,z=x⊕yx=i,y=j,z=x\oplus yx=i,y=j,z=x⊕y,f(x)=∑x⊕y=z,z>xf(z)a(y)f(x)=\sum_{x\oplus y=z,z>x}f(z)a(y)f(x)=∑x⊕y=z,z>x?f(z)a(y),看到f(x)f(x)f(x)的式子很像異或卷積,所以為了更直觀,繼續(xù)化簡f(x)=∑z⊕y=x,z>xf(z)a(y)f(x)=\sum_{z\oplus y=x,z>x}f(z)a(y)f(x)=∑z⊕y=x,z>x?f(z)a(y)。
觀察可知,那么去掉z>xz>xz>x的條件的話,這個就是一個異或卷積的裸式子了,考慮到對于iii只有>i>i>i的fff能對其有貢獻(xiàn),所以考慮cdqcdqcdq分治來計算這個式子,就可以去掉z>xz>xz>x這個條件了。在分治的過程中,只需要先遞歸計算右邊的值,讓后計算當(dāng)前左區(qū)間的值,再遞歸左區(qū)間處理子問題即可。
但是問題還沒有解決,a(y)a(y)a(y)怎么確定呢?在卷的過程中我們需要保證所有aaa都需要符合條件才可,不然會卷出來其他不合法的答案。考慮當(dāng)前區(qū)間分成的兩部分[l,mid],[mid+1,r][l,mid],[mid+1,r][l,mid],[mid+1,r]對應(yīng)的二進(jìn)制分別是[xxx000,xxx011],[xxx100,xxx111][xxx000,xxx011],[xxx100,xxx111][xxx000,xxx011],[xxx100,xxx111],發(fā)現(xiàn)了什么?我們計算左區(qū)間的時候,他們的aaa是那些部分呢?顯然答案應(yīng)該是aaa中下標(biāo)在[100,111][100,111][100,111]的范圍內(nèi)的數(shù),可以發(fā)現(xiàn)左區(qū)間[xxx000,xxx011][xxx000,xxx011][xxx000,xxx011]異或上區(qū)間內(nèi)任何一個數(shù)都會準(zhǔn)確的落在右區(qū)間的某個位置,且只有這些數(shù)能落在右區(qū)間。所以卷的時候讓右區(qū)間的fff和上面的aaa對應(yīng)區(qū)間卷起來即可。
遞歸到l=rl=rl=r的時候直接計算答案即可。
總結(jié)
以上是生活随笔為你收集整理的2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #73
- 下一篇: P4231 三步必杀 二次差分