[cf923e]Perpetual Subtraction

  • 题目链接

    cf923e

  • 题目大意

    开始有一个随机整数 (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)))

原文地址:https://www.cnblogs.com/leukocyte/p/14546441.html