[CF850F] Rainbow Balls

题目大意

这里

题解

我们枚举最后剩下的球的种类,那么其他球可以看做没用了。
设选定的球有\(a_i\)个,球的总数为\(s=\sum_{i=1}^n a_i\)
现在问题变为:在一个长度为\(s\)的数轴上,初始在\(a_i\),问在不到达\(0\)的前提下到达\(s\)的期望步数。
\(p_i\)表示在\(i\)点,向前/后移动一步的概率,有:\(p_i = \frac{i(s-i)}{s(s-1)}\)
可以列出一个比较显然的式子:
\[f_i = (1-2p_i) f_i + p_i f_{i-1} + p_i f_{i+1} + step_i\]
注意\(step_i = \frac{i}{s}\),为什么?
感性理解一下。
想象你有一张很大的图,有一些节点是终止节点。
现在你要从当前节点向某个后继节点走一步,要算到达任意一个终止节点的期望步数。
由于我们现在选定了一个终止节点。
那么假设走到了\(0\)号点,就相当于走到了去往另一个终止节点的路径。
不妨把这"1"步拆分成若干份,这若干份的和为\(1\),分开计算。
由于走到\(0\)就会走到另一条路径上去,所以每一份不妨设为不走到其它路径上的概率。
所以\(step_i\)为从\(i\)点出发,不走到\(0\)的条件下走到\(s\)的概率。
这是一个经典问题了,很容易得到\(step_i = \frac{i}{s}\)
树上高消肯定是可以的,然而需要求逆复杂度为\(O((\sum a)logn)\)无法通过此题。
所以我们需要进一步深入。
带入\(step_i = \frac{i}{s}\),稍微变换后有:
\[f_i - f_{i+1} = (f_{i-1}-f_i) +\frac{s-1}{s-i}\]
所以可以得到:\(f_{i}-f_{i+1} = (f_1-f_2) + \sum_{j=2}^{i}\frac{s-1}{s-j}\)
那么有:
\[f_1 = \sum_{i=1}^{s-1} (f_i - f_{i+1}) = (s-1)(f_1-f_2)+\sum_{i=2}^{s-1}\sum_{j=2}^{i} \frac{s-1}{s-j}\]
\(\sum_{i=2}^{s-1}\sum_{j=2}^{i} \frac{s-1}{s-j} = \sum_{i=2}^{s-1} (s-i) \frac{s-1}{s-i} =(s-2)(s-1)\)
所以\(f_1 = (s-1)(f_1-f_2) + (s-2)(s-1)\)
而由于\(f_0\)属于另一条路径,即不存在,故\(f_1 = (1-2p)f_1 +pf_2 + \frac{1}{s}\)
化简有:\(2f_1 = f_2 + 1\),所以\(f_1 - f_2 = 1 - f_1\)
所以有:
\[f_1 = (s-1)(1-f_1) +(s-2)(s-1)\]
解得\(f_1 = \frac{(s-1)^2}{s}\),即\(f_1-f_2 = 1-\frac{(s-1)^2}{s}\)
而我们知道\(f_{i}-f_{i+1}\)\(f_{i-1}-f_i\)之间的关系,所顺次推出所有\(f_i\)即可。
答案\(ans = \sum_{i=1}^n f_{a_i}\),复杂度\(O(max(a)logn)\)

转载于:https://www.cnblogs.com/GuessYCB/p/10228339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值