[cf923e]Perpetual Subtraction
-
题目链接
cf923e
-
题目大意
开始有一个随机整数 \(x \in [0,N]\) ,\(x\) 为 \(i\) 的概率为 \(p_i\) 。
每轮均等地从 \([0,x]\) 中选择一个整数 \(x'\) ,将 \(x\) 替换为 \(x'\) 。
求 \(M\) 次操作后,对每个 \(i\) 求出最后剩余的数为 \(i\) 的概率。
对 \(998244353\) 取模。
\(N\le 10^5,\ M\le 10^{18},\ p_i<998244353\)
-
题解
首先每次操作只和之前的状态有关,所以可以抽象为一个 \(Markov\) 链。
初始状态为向量 \(P\) ,转移矩阵就是:
\[A=\begin{pmatrix} 1&\frac{1}{2}&\frac{1}{3}&\dots&\frac{1}{N+1}\\ 0&\frac{1}{2}&\frac{1}{3}&\dots&\frac{1}{N+1}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\dots&\frac{1}{N+1} \end{pmatrix} \]所以我们就是求 \(A^MP\)。
直接矩阵快速幂肯定不可以接受,考虑优化。
注意到 \(A\) 是一个上三角矩阵,那么就可以利用特征值,特征向量和基变换这一套理论。
\(A\) 的特征值显然为对角线上的元素。
那么显然有矩阵:
\[\Lambda= \begin{pmatrix} 1&0&0&\dots&0\\ 0&\frac{1}{2}&0&\dots&0\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\dots&\frac{1}{N+1} \end{pmatrix} \]可以得到特征向量 \(v_i=((-1)^{i+j}\binom{i}{j})_{j=0}^N\) 。
那么再构造一个矩阵:
\[V= \begin{pmatrix} 1&-1&1&\dots&(-1)^N\\ 0&1&-2&\dots&(-1)^{N+1}\binom{N}{1}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\dots&1 \end{pmatrix} \]\(V\) 的每一列为特征向量。
接下来考虑 \(V^{-1}\),发现这个特征向量长得很像二项式反演,那么可以直接构造:
\[V^{-1}= \begin{pmatrix} 1&1&1&\dots&1\\ 0&1&2&\dots&\binom{N}{1}\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0&0&0&\dots&1 \end{pmatrix} \]手玩一下发现是对的。
那么根据基变换:
\[V^{-1}·A·V=\Lambda\\ A=V·\Lambda·V^{-1}\\ A^M=V·\Lambda^M·V^{-1} \]所以我们求的就是 \(V·\Lambda^M·V^{-1}·P\) 。
其中 \(\Lambda^M\) 可以在 \(\mathcal O(N\log M)\) 的复杂度求得,那么我们得到了一个 \(\mathcal O(N\log M+N^2)\) 的做法。
但这还不够,还要继续优化。
可以发现一个向量乘 \(V\) 和 \(V^{-1}\) 展开是一个经典的卷积,直接 \(NTT\) 。
总复杂度 \(\mathcal O(N(\log M+\log N))\) 。