CF618G Combining Slimes 题解

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

CF618G Combining Slimes

CF618G Combining Slimes

首先考虑根据期望的线性性质对于每一个数分开来计算贡献,之后再求出每一个数出现的概率即可。

也不是很清楚这个东西是不是线性性质。

但是说实话就是对于所有数一起考虑是不能入手的。

之后我们发现事实上任意的数都有可能出现,发现其没有取模,我们不妨计算一下一个数可能出现的概率。

如果说这个数是 x x x,那么其概率是 ( 1 − 1 0 − 9 ) 2 x − 1 (1 - 10^{-9})^{2^{x - 1}} (1109)2x1。算一下发现 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(i1,j1)×a(i,j1)

就是考虑前面出现的同时出现两个数的情况,那么肯定有一个拼成的数需要占用一个位置。

显然初值是 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)=1p

但是发现 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)×(1a(i1,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,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值