TheSwapsDivOne
作者:翁文涛 徐明宽
关键词:概率,期望,Dp,递推数列
题目简述
给定一个长度为的序列,有一个人会对这个序列进行轮操作。每一轮,这个人会随机选择两个位置,并交换。操作完后,他会随机选择这个序列的一段连续区间,记,问的期望是多少。
数据范围
算法一
令表示最终这个位置是否被选中,表示位置最终的值,那么有: 那么问题就变成,对于每个位置,求出和,非常好求,就等于 ,现在关键就是求出。 令表示,第个位置经过轮被移到了第个位置的概率。那么对于,我们可以得到的转移式: 其中,第一项表示第轮交换没有选中位置的概率,第二项表示之前是位置移到位置,然后第轮选择了来交换。 那么显然,。 直接这样做是会超时的,我们不妨观察的转移,可以发现,由于,,并且转移中并没有将具体的值代入计算,因此,可以用数学归纳法简单的证明出,假如固定,对于任意,,有,且。 那么我们可以稍微修改一下dp的状态。设,,那么我们可以根据的转移,轻松写出和的转移: 那么我们可以求出和。 最后,。
算法二
注意到,记,则由于,有 所以直接一个pow就好啦~于是总时间复杂度就变成了(瓶颈为输入……)