一个长度为 $n$ 的环,初始位置 $i$ 有 $x_i$ 个人。
接下来每步,每个人有 $\frac as$ 概率向前一步,$\frac bs$ 概率向后一步,$\frac cs$ 概率不动,其中 $s=a+b+c$。
问 $k$ 次后每个位置的人数期望。
倍增 $\text{dp}$,${dp}(i,j)$ 表示初始只有位置 $0$ 有一人,则 $j$ 步后位置 $i$ 期望有几人。
不难得到状态转移方程,时间复杂度 $O(n^2\log k)$。
循环矩阵快速幂,时间复杂度 $O(n^2\log k)$。
$$ \begin{pmatrix} \text{ans}_0\\ \text{ans}_1\\ \vdots\\ \text{ans}_{n-1} \end{pmatrix}= \begin{pmatrix} c & b & 0 & \cdots & a \\ a & c & b & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ b & 0 & 0 & \cdots & c \end{pmatrix} \begin{pmatrix} x_0\\ x_1\\ \vdots\\ x_{n-1} \end{pmatrix}$$
设 $F=\{x_0,x_1\cdots x_{n-1}\},G=\{c,a,0\cdots 0,b\}$。
于是所求答案为 $FG^k$ 的长度为 $n$ 的循环卷积。
直接暴力卷积时间复杂度 $O(n\log n\log k)$,如果套用 $\text{Bluestein's Algotithm}$ 时间复杂度 $O(n(\log n+\log k))$。