F 抽奖


考虑枚举每次抽到奖品需要的次数,恰好抽 nn 次后中奖的概率就是 (1q)n1q(1-q)^{n-1}q,就有计算式:

E(xk)=qm(1q)mn1=1n2=1nm=1(i=1mni)kj=1m(1q)njE(x^k) = \dfrac{q^m}{(1-q)^m}\displaystyle\sum_{n_1=1}^{\infty}\sum_{n_2=1}^\infty \cdots\sum_{n_m=1}^{\infty}\left( \sum_{i=1}^m n_i\right)^k\prod_{j=1}^m(1-q)^{n_j}

根据 ik=k![xk]eixi^k=k![x^k]\text e^{ix},答案就可以写为

E(xk)=qm(1q)m[xkk!]n1=1en1x(1q)n1n2=1en2x(1q)n2nm=1enmx(1q)nmE(x^k)= \dfrac{q^m}{(1-q)^m}\left[ \dfrac{x^k}{k!}\right]\displaystyle\sum_{n_1=1}^{\infty}\text e^{n_1x}(1-q)^{n_1}\sum_{n_2=1}^\infty \text e^{n_2x}(1-q)^{n_2}\cdots\sum_{n_m=1}^{\infty} \text e^{n_mx}(1-q)^{n_m}

注意到这样各个和式之间就不相关了,可以直接写为各和式的乘积:

E(xk)=qm(1q)m[xkk!](11(1q)ex1)mE(x^k) = \dfrac{q^m}{(1-q)^m}\left[ \dfrac{x^k}{k!}\right]\left( \dfrac{1}{1-(1-q)\text e^x}-1\right)^m

r=1qr=1-q,那么现在的问题就变为提取 qmemx(1rex)mq^m\text e^{mx}(1-r\text e^x)^{-m}xkx^k 系数,使用 FFT 就可以做到 Θ(klogk)\Theta(k \log k) 的时间复杂度,但这显然是不够的。

根据 EI 总结的一套方法,设 F(x)=(x+1)m(1r(x+1))mF(x)=(x+1)^m(1-r(x+1))^{-m},所求即 qm[xk]F(ex1)q^m[x^k]F(\text e^x-1)

由于 ex1\text e^x-1 没有常数项,所以次数高于 xkx^k 的项对于答案没有贡献,我们只需知道 F(x)=F(x)modxk+1\mathcal F(x) = F(x) \bmod x^{k+1},然后求 [xk]F(ex1)[x^k]\mathcal F(\text e^x-1) 即可。

直接这样算并没有优化复杂度,但 F(x)\mathcal F(x) 的系数是可整式递推的,设 G(x)=F(x1)\mathcal G(x) = \mathcal F(x-1),则 G(x)\mathcal G(x) 也是可整式递推的,其前 kk 项系数可以 Θ(k)\Theta(k) 计算,再配合线性筛就可以计算出 [xk]G(ex)[x^k]\mathcal G(\text e^x)

具体来讲,求导一下可以得到 F(x)F(x) 的 ODE:

(1+x)(qrx)F(x)m(r+q)F(x)=0(1+x)(q-rx)F'(x) - m(r+q)F(x) = 0

提取 xn1x^{n-1} 系数:

nqFn+(qr)(n1)Fn1r(n2)Fn2m(r+q)Fn1=0nqF_n+(q-r)(n-1)F_{n-1}-r(n-2)F_{n-2}-m(r+q)F_{n-1}=0

fn=[xn]F(x)f_n=[x^n]\mathcal F(x)u=(k+1)qFk+1u=-(k+1)qF_{k+1}v=rkFkv=-rkF_k,就有

nqfn+(qr)(n1)fn1r(n2)fn2m(r+q)fn1=[n=k+1]u+[n=k+2]vnqf_n+(q-r)(n-1)f_{n-1}-r(n-2)f_{n-2}-m(r+q)f_{n-1}=[n=k+1]u+[n=k+2]v

写做 ODE 就是

(1+x)(qrx)F(x)m(r+q)F(x)=uxk+vxk+1(1+x)(q-rx)\mathcal F'(x)-m(r+q)\mathcal F(x) = ux^k+vx^{k+1}

做代换 x=t1x=t-1,得到 G(t)\mathcal G(t) 的 ODE:

t(qr(t1))G(t)m(r+q)G(t)=u(t1)k+v(t1)k+1t(q-r(t-1))\mathcal G'(t)-m(r+q)\mathcal G(t) = u(t-1)^k+v(t-1)^{k+1}

直接提取系数就能得到递推式,这里就不赘述了。
总时间复杂度 Θ(k)\Theta(k)