CF947E
题意
有一个非负整数\(x\)。你要执行\(m\)次操作,每次操作是\(x = randint(0, x)\) ( randint(0, x)均匀随机地在\([0,x]\)中取一个整数)。
现在已知初始的\(x\)会随机在\([0,n]\)取值,且取\(i\)的概率是\(p_i\),求最后取到\([0,n]\)每个数的概率。
\(n\le 10^5,m\le 10^{18}\)
做法
令当前取到\(i\)的概率为\(f_i\),一轮后为\(f^*_i\),有
\[f^*_i=\sum_{j=i}^n\frac{f_j}{j+1}
\]
令\(F(x)\)为\(f\)的生成函数,有:
\[\begin{aligned}
F^*(x)&=\sum_{i=0}^nx^i\sum_{j=0}^n\frac{f_j}{j+1}\\
&=\sum_{j=0}^n\frac{f_j}{j+1}\sum_{i=0}^j x^i\\
&=\sum_{j=0}^n\frac{f_j}{j+1}\frac{x^{j+1}-1}{x-1}\\
&=\frac1{x-1}\sum_{j=0}^n f_j\int_1^x t^j{\rm d}t\\
&=\frac{\int_1^x F(t){\rm d}t}{x-1}
\end{aligned}\]
令\(G(x)=F(x+1)\),有
\[G^*(x)=F^*(x+1)=\frac{\int_1^{x+1}F(t){\rm d}t}{x+1-1}=\frac{\int_0^x G(t){\rm d}t}x
\]
\(m\)次后为\(g^*_i=\frac{g_i}{(i+1)^m}\)
由于
\[\sum_{i=0}^ng_ix^i=\sum_{j=0}^nf_j(x+1)^j=\sum_{j=0}^nf_j\sum_{i=0}^j{j\choose i}x^i
\]
有
\[g_i=\sum_{j=i}^n{j\choose i}f_j,f_i=\sum_{j=i}^n (-1)^{j-i}{j\choose i}g_j
\]