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 \]

posted @ 2020-05-24 21:26  Grice  阅读(178)  评论(0编辑  收藏  举报