[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))\)

posted @ 2021-03-16 22:32  leukocyte  阅读(84)  评论(0编辑  收藏  举报