黑板上有一个整数 x,初始时它的值为 [0,n] 中的某一个整数,其中为 i 的概率是 pi
每一轮你可以将 x 完全随机地替换成 [0,x] 中的一个数。
求 m 轮后,对于每个 i∈[0,n],x=i 的概率。
n≤105,m≤1018,答案对 998244353 取模。
设 fm(x) 表示 m 轮之后数为 x 的答案,Fm(x)=i=0∑nfm(i)xi 也就是 f 的生成函数,那么有:
∵fm(x)=i=x∑ni+1fm−1(i)
∴Fm(x)=i=0∑nxij=i∑nj+1fm−1(j)
=i=0∑ni+1fm−1(i)j=0∑ixj
=i=0∑ni+1fm−1(i)x−1xi+1−1
=x−11i=0∑nfm−1(i)i+1xi+1−1
注意到 ∫xidx=i+1xi+1,那么:
=x−11i=0∑nfm−1(i)∫1xtidt
=x−11i=0∑n∫1xfm−1(i)tidt
=x−11∫1xFm−1(t)dt
发现这个定积分很烦,那么考虑设 Gm(x)=fm(x+1)=i=0∑ngm(i)xi,那么有:
Gm(x)=x1∫1x+1Fm−1(t)dt
=x0∫0xFm−1(t+1)d(t+1)
=x1∫0xGm−1(t)dt
=x1∫0xGm−1(t)dt
=x1i=0∑ni+1gm−1(i)xi+1
=i=0∑ni+1gm−1(i)xi
即 gm(i)=i+1gm−1(i)=(i+1)m−1g1(i),接下来问题就转变为快速求出 g1(i),然后根据 gm(i) 快速求出 fm(i)。
先考虑快速求出 g1(i):
∵G1(x)=F1(x+1)
∴G1(x)=i=0∑nf1(i)(x+1)i
注意到 f1(i)=pi:
=i=0∑npi(x+1)i
根据二项式定理展开整理:
=i=0∑npij=0∑i(ji)xj
=i=0∑nxjj=i∑n(ij)pj
也就是说:
g1(i)=j=i∑n(ij)pj
=j=i∑ni!(j−i)!pjj!
=i!1j=i∑n(j−i)!pjj!
根据老套路,我们把 p 反过来,设 pj′=pn−j,那么有:
=i!1j=0∑n−i(n−i−j)!pj′(n−j)!
显然可以用卷积快速做。
接下来考虑根据 gm(i) 求出 fm(i),与上面十分类似:
∵Gm(x)=Fm(x+1)
∴Fm(x)=i=0∑ngm(i)(x−1)i
=i=0∑ngm(i)j=0∑i(ji)xj(−1)i−j
=i=0∑nxij=i∑ngm(j)(ij)(−1)j−i
即:
fm(i)=j=i∑ngm(j)(ij)(−1)j−i
=j=i∑ni!(j−i)!gm(j)(−1)j−ij!
=i!1j=i∑ngm(j)j!(j−i)!(−1)j−i
设 gi′=gn−i:
=i!1j=0∑n−igm′(j)(n−j)!(n−i−j)!(−1)n−i−j
显然可以用卷积快速做。
总结一下,首先通过 p′ 求出 g1(i):
g1(i)=i!1j=0∑n−i(n−i−j)!pj′(n−j)!
然后根据 g1(i) 求出 gm(i):
gm(i)=(i+1)m−1g1(i)
最后根据 g’m(i) 求出 fm(i):
fm(i)=i!1j=0∑n−igm′(j)(n−j)!(n−i−j)!(−1)n−i−j