-
题目链接
-
题目大意
开始有一个随机整数 (x in [0,N]) ,(x) 为 (i) 的概率为 (p_i) 。
每轮均等地从 ([0,x]) 中选择一个整数 (x') ,将 (x) 替换为 (x') 。
求 (M) 次操作后,对每个 (i) 求出最后剩余的数为 (i) 的概率。
对 (998244353) 取模。
(Nle 10^5, Mle 10^{18}, p_i<998244353)
-
题解
首先每次操作只和之前的状态有关,所以可以抽象为一个 (Markov) 链。
初始状态为向量 (P) ,转移矩阵就是:
[A=egin{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= egin{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}inom{i}{j})_{j=0}^N) 。
那么再构造一个矩阵:
[V= egin{pmatrix} 1&-1&1&dots&(-1)^N\ 0&1&-2&dots&(-1)^{N+1}inom{N}{1}\ vdots&vdots&vdots&ddots&vdots\ 0&0&0&dots&1 end{pmatrix} ](V) 的每一列为特征向量。
接下来考虑 (V^{-1}),发现这个特征向量长得很像二项式反演,那么可以直接构造:
[V^{-1}= egin{pmatrix} 1&1&1&dots&1\ 0&1&2&dots&inom{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(Nlog M)) 的复杂度求得,那么我们得到了一个 (mathcal O(Nlog M+N^2)) 的做法。
但这还不够,还要继续优化。
可以发现一个向量乘 (V) 和 (V^{-1}) 展开是一个经典的卷积,直接 (NTT) 。
总复杂度 (mathcal O(N(log M+log N))) 。