题意
有一个非负整数(x)。你要执行(m)次操作,每次操作是(x = randint(0, x)) ( randint(0, x)均匀随机地在([0,x])中取一个整数)。
现在已知初始的(x)会随机在([0,n])取值,且取(i)的概率是(p_i),求最后取到([0,n])每个数的概率。
(nle 10^5,mle 10^{18})
做法
令当前取到(i)的概率为(f_i),一轮后为(f^*_i),有
[f^*_i=sum_{j=i}^nfrac{f_j}{j+1}
]
令(F(x))为(f)的生成函数,有:
[egin{aligned}
F^*(x)&=sum_{i=0}^nx^isum_{j=0}^nfrac{f_j}{j+1}\
&=sum_{j=0}^nfrac{f_j}{j+1}sum_{i=0}^j x^i\
&=sum_{j=0}^nfrac{f_j}{j+1}frac{x^{j+1}-1}{x-1}\
&=frac1{x-1}sum_{j=0}^n f_jint_1^x t^j{
m d}t\
&=frac{int_1^x F(t){
m d}t}{x-1}
end{aligned}]
令(G(x)=F(x+1)),有
[G^*(x)=F^*(x+1)=frac{int_1^{x+1}F(t){
m d}t}{x+1-1}=frac{int_0^x G(t){
m 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_jsum_{i=0}^j{jchoose i}x^i
]
有
[g_i=sum_{j=i}^n{jchoose i}f_j,f_i=sum_{j=i}^n (-1)^{j-i}{jchoose i}g_j
]