ABC249H Dye Color 题解
有 \(n\) 个球,第 \(i\) 个球的颜色为 \(A_i\),颜色是 \(1 \sim n\)。重复以下步骤,直到所有球的颜色相同:
- 从 \(2^n\) 个子集(包括空集)随机选出一个子集 \(\{X_1, X_2, X_3, \dots, X_K\}\),然后随机选择一个排列,然后从中间选出 \(K\) 个数 \((P_1, P_2, \dots P_K)\),接着 \(A_{X_i} \gets P_i\)。
求期望操作次数 \(\bmod ~ 998244353\)。\(N \le 2000\)。
数学
势能函数
可能算是官方题解的中文翻译版……加了少量自己的理解以及代码。
对于一个序列 \(A = (A_1, A_2,\dots,A_N)\),我们定义 \(f(A)\) 表示期望操作次数。同时,如果所有元素全部相等,那么我们成为终止状态,定义 \(E_{A, A'}\) 表示序列 \(A\) 通过一次操作变成 \(A'\) 的概率。
如果 \(A\) 是终止状态,那么 \(f(A) = 0\),否则,\(f(A) = 1 + \sum E_{A, A'} f(A')\)。
同时,我们定义 \(B_{A, j}\) 表示 \(A_i = j\) 的个数。
如果存在一个常数 \(C\) 和一个函数 \(g(x)\) 满足 \(\sum_{i = 1}^N g(B_{A,i}) = f(A) + C\),那么可以解决本问题,其中 \(g\) 应当满足 \(\sum_{i = 1}^n g(B_{A,i}) = 1 + \sum E_{A, A'}\sum_{i = 1}^n g(B_{A', i})\)。(这个是官方题解的说明,其实更加准确的说,\(g(x)\) 是一个势能函数)
如果 \(g\) 满足 \(\forall i,g(B_{A, i}) = \frac{1}{n} + \sum E_{A, A'} g(B_{A', i})\) 那么上面的方程式是肯定满足的。
注意,这里的 \(g\) 是势能函数,也就是 \(g\) 只要满足如上关系,并且是和答案有关的函数即可。后面 \(g(0)\) 的值会用到这一点。
进一步,当 \(B_i = j\),每一步使得 \(B_i = k\) 的概率可以写成之和 \(j, k\) 有关的形式。
我们只要再求解出一个转移系数 \(P_{i, j}\) 表示,一次操作使得 \(B_x = i \Rightarrow B_x = j\) 的概率,根据之前的定义有 \(g(i) = \frac{1}{n} + \sum_{j} P_{i, j} g(j)\),注意到 \(\forall j > i + 1, P_{i, j} = 0\),于是我们的方程写成矩阵长这样:
考虑两种情况:
- 从 \(i\) 个颜色为 \(x\) 的球中间拿出 \(j\) 个球,然后再从 \(n - i\) 个球中间取出 \(k\) 个球,随机染色后出现 \(x\) 颜色的概率是 \(\frac{j + k}{n}\),会剩下 \(i - j + 1\) 个 \(x\) 颜色的球,那么 \(P_{i, i - j + 1} \gets P_{i, i - j + 1}+ \frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{k+j}{n}}{2^n}\),而 \(\frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{k+j}{n}}{2^n} = \frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{k}{n}}{2^n} + \frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{j}{n}}{2^n} = \binom{i}{j} \left(\frac{n - i}{2^{i +1}n} +\frac{j}{2^{i}n}\right)\)。
- 从 \(i\) 个颜色为 \(x\) 的球中间拿出 \(j\) 个球,然后再从 \(n - i\) 个球中间取出 \(k\) 个球,随机染色后没有出现 \(x\) 颜色的概率是 \(\frac{n - j - k}{n}\),会剩下 \(i - j\) 个球,那么 \(P_{i, i - j} \gets P_{i, i - j}+ \frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{n - k-j}{n}}{2^n}\),而 \(\frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{n - k - j}{n}}{2^n} = -\frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{k}{n}}{2^n} + \frac{\sum_{k = 0}^{n - i} \binom{n - i}{k}\binom{i}{j} \frac{n - j}{n}}{2^n} = \binom{i}{j} \left(-\frac{n - i}{2^{i +1}n} +\frac{n - j}{2^{i}n}\right)\)。
然后可以 \(\mathcal O(n^2)\) 计算 \(P\) 了。
计算了 \(P\) 之后,可以愉快的计算 \(g\) 了,注意到矩阵的特殊形式,令 \(g(0) = C\)(任意值,因为前文说的"势能"的概念),然后可以带出所有值,令初始状态每个数的出现次数为 \(b_i\),而终止状态就是一个数出现 \(n\) 次其他数出现 \(0\) 次,答案就是起始状态 - 终止状态,也就是 \(\left(\sum_{i} g(b_i)\right) - g(n) - (n - 1)g(0)\)。