2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治
传送门
文章目录
- 题意:
- 思路:
题意:
给你一个大轮盘,被分成了nnn个区域0,1,2,..,n−10,1,2,..,n-10,1,2,..,n−1,每个区域被转到的概率是ai∑j=0n−1aj\frac{a_i}{\sum_{j=0}^{n-1}a_j}∑j=0n−1ajai,转到第iii个区域的时候得分是iii。现在你初始有x=0x=0x=0分,每次转动轮盘假设得到了yyy分,那么如果x⊕y≤xx\oplus y\le xx⊕y≤x的话,当前得分不会变化,否则将x=x⊕yx=x\oplus yx=x⊕y,当得分达到n−1n-1n−1的时候立即停止,问你转转盘轮数的期望。
2≤n≤2162\le n\le2^{16}2≤n≤216,且nnn为222的幂次。
思路:
以下我们约定:aia_iai代表得分为iii的概率。
考虑期望dpdpdp,我们这里倒着来推,所以设f[i]f[i]f[i]表示当得分为iii的时候还需要进行的轮数期望是多少,很容易就可以得到n2n^2n2的一个转移方程: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],我们进行移项:
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−1aj+∑j=0n−1[(i⊕j)>i]fi⊕j∗aj
这个式子一眼看去只能n2n^2n2求,可以发现瓶颈就在∑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这个式子上,我们将其化简一下,设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>xf(z)a(y),看到f(x)f(x)f(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>xf(z)a(y)。
观察可知,那么去掉z>xz>xz>x的条件的话,这个就是一个异或卷积的裸式子了,考虑到对于iii只有>i>i>i的fff能对其有贡献,所以考虑cdqcdqcdq分治来计算这个式子,就可以去掉z>xz>xz>x这个条件了。在分治的过程中,只需要先递归计算右边的值,让后计算当前左区间的值,再递归左区间处理子问题即可。
但是问题还没有解决,a(y)a(y)a(y)怎么确定呢?在卷的过程中我们需要保证所有aaa都需要符合条件才可,不然会卷出来其他不合法的答案。考虑当前区间分成的两部分[l,mid],[mid+1,r][l,mid],[mid+1,r][l,mid],[mid+1,r]对应的二进制分别是[xxx000,xxx011],[xxx100,xxx111][xxx000,xxx011],[xxx100,xxx111][xxx000,xxx011],[xxx100,xxx111],发现了什么?我们计算左区间的时候,他们的aaa是那些部分呢?显然答案应该是aaa中下标在[100,111][100,111][100,111]的范围内的数,可以发现左区间[xxx000,xxx011][xxx000,xxx011][xxx000,xxx011]异或上区间内任何一个数都会准确的落在右区间的某个位置,且只有这些数能落在右区间。所以卷的时候让右区间的fff和上面的aaa对应区间卷起来即可。
递归到l=rl=rl=r的时候直接计算答案即可。
总结
以上是生活随笔为你收集整理的2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Codeforces Round #73
- 下一篇: P4231 三步必杀 二次差分