Gravatar
yrtiop
积分:2101
提交:309 / 808

Pro2918  [HEOI 2017] 分手是祝愿

COGS 不支持 Markdown,有些格式用不了,推荐到我的博客阅读。

Observation 1:从大到小,遇到 1 就操作,这样的操作次数最少。

证明:显然。

Observation 2:设上述结论得出的操作序列为 $p_1\sim p_m$,则对于每一次随机操作,如果操作的 $i\in p$,则 $m\gets m-1$,反之 $m\gets m+1$。

证明:因为操作顺序不影响结果,所以若 $i\in p$,则最少操作次数 -1。

反之手动模拟,如果 $i\notin p$,那么操作序列就要新增 $i$,操作次数 +1。

也就是说,答案只和 $m$ 的大小有关。

据此,设 $f_i$ 表示当前状态最少操作次数为 $i$ 时的期望答案。

有:

$$\begin{cases}f_i=i, & i\le k\\f_i=\frac{i}{n}f_{i-1}+\frac{n-i}{n}f_{i+1}+1, & \rm Otherwise\end{cases}$$

不知道有没有 MO 大神能解这个函数方程阿,反正我搞不出来这个东西,讲一下在洛谷题解里看到的神奇方法。

(upd:看到一种叫线性高消的神奇做法,算是高斯消元的变种,因为每个方程只有 3 项,所以可以 $\mathcal O(n)$ 算出来方程组的解)

考虑转化为更一般的形式,通常来讲期望递推都可以化简为 $f_i=f_{i-1}+b_i$ 的形式。

那么不妨设 $b_i=f_i-f_{i-1}$ 即 $f_i=f_{i-1}+b_i$,其中 $b_i$ 未知,把它带进方程解出来:

$$\begin{aligned}f_i & =\frac{i}{n}f_{i-1}+\frac{n-i}{n}f_{i+1}+1\\& = \frac{i}{n}(f_{i}-b_i)+\frac{n-i}{n}(f_i+b_{i+1})+1\end{aligned}$$

化简得:

$$b_i=\frac{(n-i)b_{i+1}+n}{i}$$

显然,$f_n=f_{n-1}+1$,故 $b_n=1$,先递推出 $b$,然后再推 $f$ 即可。

因为要求 $1\sim n$ 的约数,故时间复杂度为 $\mathcal O(n\ln n)$


2023-01-25 20:25:49    
我有话要说
暂无人分享评论!