CF923E Perpetual Subtraction 做题记录

黑板上有一个整数 xx,初始时它的值为 [0,n][0,n] 中的某一个整数,其中为 ii 的概率是 pip_i

每一轮你可以将 xx 完全随机地替换成 [0,x][0,x] 中的一个数。

mm 轮后,对于每个 i[0,n]i\in[0,n]x=ix=i 的概率。

n105n \le 10^5m1018m \le 10^{18},答案对 998244353998244353 取模。

fm(x)f_m(x) 表示 mm 轮之后数为 xx 的答案,Fm(x)=i=0nfm(i)xiF_m(x)=\sum\limits_{i=0}^n f_m(i)x^i 也就是 ff 的生成函数,那么有:

fm(x)=i=xnfm1(i)i+1\because f_m(x)=\sum\limits_{i=x}^n \dfrac{f_{m-1}(i)}{i+1}

Fm(x)=i=0nxij=infm1(j)j+1\therefore F_m(x)=\sum\limits_{i=0}^nx^i\sum\limits_{j=i}^n\dfrac{f_{m-1}(j)}{j+1}

=i=0nfm1(i)i+1j=0ixj=\sum\limits_{i=0}^n \dfrac{f_{m-1}(i)}{i+1}\sum\limits_{j=0}^i x^j

=i=0nfm1(i)i+1xi+11x1=\sum\limits_{i=0}^n \dfrac{f_{m-1}(i)}{i+1}\dfrac{x^{i+1}-1}{x-1}

=1x1i=0nfm1(i)xi+11i+1=\dfrac{1}{x-1}\sum\limits_{i=0}^nf_{m-1}(i)\dfrac{x^{i+1}-1}{i+1}

注意到 xidx=xi+1i+1\int x^i dx=\dfrac{x^{i+1}}{i+1},那么:

=1x1i=0nfm1(i)1xtidt=\dfrac{1}{x-1}\sum\limits_{i=0}^nf_{m-1}(i)\int_1^xt^idt

=1x1i=0n1xfm1(i)tidt=\dfrac{1}{x-1}\sum\limits_{i=0}^n\int_1^xf_{m-1}(i)t^idt

=1x11xFm1(t)dt=\dfrac{1}{x-1}\int_1^xF_{m-1}(t)dt

发现这个定积分很烦,那么考虑设 Gm(x)=fm(x+1)=i=0ngm(i)xiG_m(x)=f_m(x+1)=\sum\limits_{i=0}^ng_m(i)x^i,那么有:

Gm(x)=1x1x+1Fm1(t)dtG_m(x)=\dfrac{1}{x}\int_1^{x+1}F_{m-1}(t)dt

=0x0xFm1(t+1)d(t+1)=\dfrac{0}{x}\int_0^xF_{m-1}(t+1)d(t+1)

=1x0xGm1(t)dt=\dfrac{1}{x}\int_0^xG_{m-1}(t)dt

=1x0xGm1(t)dt=\dfrac{1}{x}\int_0^xG_{m-1}(t)dt

=1xi=0ngm1(i)i+1xi+1=\dfrac{1}{x}\sum\limits_{i=0}^n\dfrac{g_{m-1}(i)}{i+1}x^{i+1}

=i=0ngm1(i)i+1xi=\sum\limits_{i=0}^n\dfrac{g_{m-1}(i)}{i+1}x^{i}

gm(i)=gm1(i)i+1=g1(i)(i+1)m1g_m(i)=\dfrac{g_{m-1}(i)}{i+1}=\dfrac{g_1(i)}{(i+1)^{m-1}},接下来问题就转变为快速求出 g1(i)g_1(i),然后根据 gm(i)g_m(i) 快速求出 fm(i)f_m(i)

先考虑快速求出 g1(i)g_1(i)

G1(x)=F1(x+1)\because G_{1}(x)=F_1(x+1)

G1(x)=i=0nf1(i)(x+1)i\therefore G_1(x)=\sum\limits_{i=0}^nf_1(i)(x+1)^i

注意到 f1(i)=pif_1(i)=p_i

=i=0npi(x+1)i=\sum\limits_{i=0}^n p_i(x+1)^i

根据二项式定理展开整理:

=i=0npij=0i(ij)xj=\sum\limits_{i=0}^np_i\sum\limits_{j=0}^i\dbinom{i}{j}x^j

=i=0nxjj=in(ji)pj=\sum\limits_{i=0}^nx^j\sum\limits_{j=i}^n\dbinom{j}{i}p_j

也就是说:

g1(i)=j=in(ji)pjg_1(i)=\sum\limits_{j=i}^n\dbinom{j}{i}p_j

=j=inpjj!i!(ji)!=\sum\limits_{j=i}^n\dfrac{p_jj!}{i!(j-i)!}

=1i!j=inpjj!(ji)!=\dfrac{1}{i!}\sum\limits_{j=i}^n\dfrac{p_jj!}{(j-i)!}

根据老套路,我们把 pp 反过来,设 pj=pnjp'_j=p_{n-j},那么有:

=1i!j=0nipj(nj)!(nij)!=\dfrac{1}{i!}\sum\limits_{j=0}^{n-i}\dfrac{p'_j(n-j)!}{(n-i-j)!}

显然可以用卷积快速做。

接下来考虑根据 gm(i)g_m(i) 求出 fm(i)f_m(i),与上面十分类似:

Gm(x)=Fm(x+1)\because G_m(x)=F_m(x+1)

Fm(x)=i=0ngm(i)(x1)i\therefore F_m(x)=\sum\limits_{i=0}^ng_m(i)(x-1)^i

=i=0ngm(i)j=0i(ij)xj(1)ij=\sum\limits_{i=0}^ng_m(i)\sum\limits_{j=0}^i\dbinom{i}{j}x^j(-1)^{i-j}

=i=0nxij=ingm(j)(ji)(1)ji=\sum\limits_{i=0}^nx^i\sum\limits_{j=i}^ng_m(j)\dbinom{j}{i}(-1)^{j-i}

即:

fm(i)=j=ingm(j)(ji)(1)jif_m(i)=\sum\limits_{j=i}^ng_m(j)\dbinom{j}{i}(-1)^{j-i}

=j=ingm(j)(1)jij!i!(ji)!=\sum\limits_{j=i}^n\dfrac{g_m(j)(-1)^{j-i}j!}{i!(j-i)!}

=1i!j=ingm(j)j!(1)ji(ji)!=\dfrac{1}{i!}\sum\limits_{j=i}^ng_m(j)j!\dfrac{(-1)^{j-i}}{(j-i)!}

gi=gnig'_i=g_{n-i}

=1i!j=0nigm(j)(nj)!(1)nij(nij)!=\dfrac{1}{i!}\sum\limits_{j=0}^{n-i}g'_m(j)(n-j)!\dfrac{(-1)^{n-i-j}}{(n-i-j)!}

显然可以用卷积快速做。

总结一下,首先通过 pp' 求出 g1(i)g_1(i)

g1(i)=1i!j=0nipj(nj)!(nij)!g_1(i)=\dfrac{1}{i!}\sum\limits_{j=0}^{n-i}\dfrac{p'_j(n-j)!}{(n-i-j)!}

然后根据 g1(i)g_1(i) 求出 gm(i)g_m(i)

gm(i)=g1(i)(i+1)m1g_m(i)=\dfrac{g_1(i)}{(i+1)^{m-1}}

最后根据 gm(i)g’_m(i) 求出 fm(i)f_m(i)

fm(i)=1i!j=0nigm(j)(nj)!(1)nij(nij)!f_m(i)=\dfrac{1}{i!}\sum\limits_{j=0}^{n-i}g'_m(j)(n-j)!\dfrac{(-1)^{n-i-j}}{(n-i-j)!}