CF1778D

题意

给出两个长度相同的 01 串 \(s_1, s_2\),每次操作从 \(s_1\) 中随机取一位取反,求期望多少次后 \(s_1\) 变为 \(s_2\)

思路

答案显然只与串长 \(n\) 和两串中不同的位的个数 \(m\) 有关,故可以直接考虑将含有 \(m\)\(1\) 的串变为全 \(0\) 串的期望次数。

考虑用 \(E_i\) 来表示串长度为 \(n\),含有 \(i\)\(1\),的串变为全零串的期望次数。

可以列出方程:

\[E_k = \frac k n E_{k- 1} + \frac {n - k} n E_{k + 1} + 1 (1 \le k < n) \]

这个方程可以在 \(\mathcal{O}(n)\) 内求解,但该方法有过于粗暴之嫌,令人厌烦。

这里其实有一种巧妙的方法,可以简洁地解出该题。

解法

我们设 \(f_i\) 表示由含有 \(i\)\(1\) 的串到含有 \(i - 1\) 个一的串的期望次数,这时我们惊奇地发现,\(f_i\) 只与 \(f_{i+1}\) 有关,方程为:

\[f_i = \frac i n + \frac{n-i}n(f_{i+1} + f_i+1) \]

化简得

\[f_i = \frac{n + (n-i)f_{i+1}}{i} \]

递推即可。

posted @ 2023-02-03 21:24  wiki0922  阅读(18)  评论(0编辑  收藏  举报