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}
\]
递推即可。