CF618G Combining Slimes
首先考虑根据期望的线性性质对于每一个数分开来计算贡献,之后再求出每一个数出现的概率即可。
也不是很清楚这个东西是不是线性性质。
但是说实话就是对于所有数一起考虑是不能入手的。
之后我们发现事实上任意的数都有可能出现,发现其没有取模,我们不妨计算一下一个数可能出现的概率。
如果说这个数是 x x x,那么其概率是 ( 1 − 1 0 − 9 ) 2 x − 1 (1 - 10^{-9})^{2^{x - 1}} (1−10−9)2x−1。算一下发现 x = 50 x = 50 x=50 的时候这个东西基本上都趋近于 0 0 0 了。那么我们可以直接只考虑前面的 50 50 50 个数。
我们考虑算每个数至少出现一次的概率,那么设其为 a ( i , j ) a(i, j) a(i,j) 那么可以得到转移方程:
a ( i , j ) = a ( i − 1 , j − 1 ) × a ( i , j − 1 ) a(i, j) = a(i - 1, j - 1) \times a(i, j - 1) a(i,j)=a(i−1,j−1)×a(i,j−1)
就是考虑前面出现的同时出现两个数的情况,那么肯定有一个拼成的数需要占用一个位置。
显然初值是 a ( 1 , 1 ) = p , a ( 1 , 2 ) = 1 − p a(1, 1) = p, a(1, 2) = 1 - p a(1,1)=p,a(1,2)=1−p。
但是发现 n n n 实际上还是很大,我们不能将所有的值都求出来,根据上文的经验,我们发现当 a ( i , j ) a(i, j) a(i,j) 其中 i > 50 i > 50 i>50 的时候也趋近于零,那么之后的所有值我们都可以用 a ( 50 , j ) a(50, j) a(50,j) 进行代替。
之后我们计算转移的方程 f ( i , j ) f(i, j) f(i,j) 表示考虑了最后的 i i i 个格子,从右开始数第 i i i 个格子恰好是 j j j 后面的值的期望。
注意因为是恰好,我们之前计算的 a a a 是至少,那么我们不妨设 A ( i , j ) = a ( i , j ) × ( 1 − a ( i − 1 , j ) ) A(i, j) = a(i, j) \times (1 - a(i - 1, j)) A(i,j)=a(i,j)×(1−a(i−1,j)) 也就是恰好。
就是说之前都不是 j j j 然后正好当前位置是 j j j 的概率。
那么可以得到 :
f ( i , j ) = j + ∑ k = 1 j − 1 f ( i − 1 , k ) × A ( i − 1 , k ) ∑ k = 1 j − 1 A ( i − 1 , k ) , j > 1 \begin{aligned} f(i, j) = j + \frac{\sum_{k = 1} ^ {j - 1} f(i - 1, k) \times A(i - 1, k)}{\sum_{k = 1} ^ {j - 1} A(i - 1, k)}, j > 1 \end{aligned} f(i,

这篇博客介绍了CF618G Combining Slimes问题的解题方法,主要涉及概率论和线性代数的应用。通过分析每个数出现的概率,发现当数大于50时,其概率接近于0,因此只考虑前50个数。博主建立了一个转移方程系统,计算在不同情况下数的期望,并利用矩阵加速递推求解答案。
最低0.47元/天 解锁文章
255

被折叠的 条评论
为什么被折叠?



