感觉这种题都比较套路。
思路
我们考虑定义势能函数 \(\Phi(x)\),满足:
- 对于一个随机过程,\(E(\Phi(A_{x+1})-\Phi(A_{x})|A_x,\cdots,A_0)=-1\)。
- \(\Phi(A_t)\) 为定值,并且 \(\Phi(A_t)=\Phi(A_i)\) 当且仅当 \(i=t\)。
此时,\(\Phi(x)+x\) 为离散时间鞅。
根据停时定理,\(E(\Phi(A_t)+t)=E(\Phi(A_0))\)。
所以有 \(E(t)=\Phi(A_t)-\Phi(A_0)\)(\(\Phi(A_t),\Phi(A_0)\) 都是定值)。
我们定义 \(f(a_i)\) 为 \(a_i\) 个学生的组的势能。
令 \(\Phi(x)=\sum f(a_i)\)。
所以有:
\[\sum_{i=1}^m f(a_i)-1=\sum_{i=1}^m \frac{a_i}{n}(\frac{1}{2}(f(1)+f(a_i-1))+\frac{1}{2}(\frac{a_i}{n}f(a_i)+\frac{n-a_i}{n}f(a_i-1)))+\frac{n-a_i}{n}(\frac{a_i}{2n}f(a_i+1)+f(a_i))
\]
不妨加强限制,钦定:
\[f(x)-\frac{x}{n}=\frac{x}{n}(\frac{1}{2}(f(1)+f(x-1))+\frac{1}{2}(\frac{x}{n}f(x)+\frac{n-x}{n}f(x-1)))+\frac{n-x}{n}(\frac{x}{2n}f(x+1)+f(x))
\]
化简一下:
\[\begin{align}
(\frac{x}{2n^2}+\frac{x(n-x)}{n^2})f(x)-\frac{x}{n}&=\frac{x}{2n}f(1)+\frac{x}{2n}f(x-1)+\frac{x(n-x)}{2n^2}(f(x-1)+f(x+1))\nonumber\\
\frac{3nx-2x^2}{2n^2}f(x)-\frac{x}{n}&=\frac{x}{2n}f(1)+\frac{x}{2n}f(x-1)+\frac{x(n-x)}{2n^2}(f(x-1)+f(x+1))\nonumber\\
(3nx-2x^2)f(x)-2nx&=nxf(1)+nxf(x-1)+x(n-x)f(x-1)+x(n-x)f(x+1)\nonumber\\
f(x+1)&=\frac{(3nx-2x^2)f(x)-(2nx-x^2)f(x-1)+nxf(1)-2nx}{x(n-x)}\nonumber\\
f(x+1)&=\frac{(3n-2x)f(x)-(2n-x)f(x-1)+nf(1)-2n}{(n-x)}\nonumber\\
\end{align}
\]
发现后面的不好消除。
但我们可以直接钦定 \(f(1)=-2\),此时 \(f(0)=0\)。
所以有:
\[\begin{align}
f(x+1)&=\frac{(3n-2x)f(x)-(2n-x)f(x-1)}{(n-x)}\nonumber\\
\end{align}
\]
直接递推维护就可以做到 \(O(n\log mod + m)\) 的复杂度啦。
Code
https://codeforces.com/contest/1479/submission/286225197。