【CFgym102482D】Gem Island(生成函数)

题意:

有一个序列 \(a_1,\cdots,a_n\),初始时它们全为 \(1\)。进行 \(d\) 轮操作:每轮操作以正比于 \(a\) 的概率选择一个 \(a_i\)\(1\)。求最后 \(a_1,\cdots,a_n\) 中前 \(r\) 大的和的期望,精度要求 \(10^{-6}\)

\(n,d,r\leq 500\)

题解:

即为求:

\[\begin{aligned} &\frac{1}{n(n+1)\cdots(n+d-1)}\sum_{a_1+\cdots+a_n=d}\binom{d}{a_1,\cdots,a_n}\prod_{i=1}^n (a_i!)\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ =&\frac{d!}{n(n+1)\cdots(n+d-1)}\sum_{a_1+\cdots+a_n=d}\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ =&\frac{1}{\binom{n+d-1}{d}}\sum_{a_1+\cdots+a_n=d}\sum_{k=1}^{r} kthmax_{i=1}^{n}(a_i)\\ \end{aligned} \]

\(h_{n,d}\) 表示所有 \(a_1+\cdots+a_n=d\) 的方案中前 \(r\) 大的 \(a_i\) 的和的和。那么:

\[h_{n,d}=\sum_{i=1}^{n}\binom{n}{i}\left(\min(r,i)\binom{(d-i)+i-1}{i-1}+h_{i,d-i}\right) \]

其中 \(i\) 枚举的是有多少 \(a_j\) 至少为 \(1\)。DP 的过程可以理解为从最底层开始一层一层地在上一层的基础上往上填。

对于取模而不必考虑精度的情况,可以做到更快。

对于 \(a_1,\cdots,a_n\) 中前 \(r\) 大的和,可以转为 \(\sum_{i\geq 1}\min(r,(a_1,\cdots,a_n中\geq i的数的个数))\)

\(f_{i,k}\) 表示 \(a_1,\cdots,a_n\) 中恰好有 \(k\) 个数 \(\geq i\) 的方案数,那么:

\[\begin{aligned} f_{i,k}&=\binom{n}{k}[x^d]\left(\frac{x^i}{1-x}\right)^k\left(\frac{1-x^i}{1-x}\right)^{n-k}\\ \end{aligned} \]

我们要求的是:

\[\begin{aligned} &\sum_{i\geq 1}\sum_{k}\min(r,k)f_{i,k}\\ =&\sum_{i\geq 1}\sum_{k}\min(r,k)\binom{n}{k}[x^{d}]\frac{x^{ik}(1-x^i)^{n-k}}{(1-x)^n}\\ =&\sum_{i\geq 1}\sum_{k}\min(r,k)\binom{n}{k}\sum_{j\geq 0}[x^j]\bigg(x^k(1-x)^{n-k}\bigg)[x^{d-ij}]\frac{1}{(1-x)^n}\\ =&\sum_{j\geq 0}\left(\sum_{k}\min(r,k)\binom{n}{k}[x^j]x^k(1-x)^{n-k}\right)\left(\sum_{i\geq 1}[x^{d-ij}]\frac{1}{(1-x)^n}\right)\\ =&\sum_{j\geq 0}A_jB_j\\ \end{aligned} \]

第二步很有技巧性,实现了 \(i,k\) 的分离。

对于 \(A_j\)

\[\begin{aligned} A_j=&\sum_{k}\min(r,k)\binom nk[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k}\min(r,k)\binom nk(-1)^{j-k}\binom{n-k}{j-k}\\ \end{aligned} \]

其实到这里就已经可以直接 \(O(n\log n)\) 卷了,但事实上:

\[\begin{aligned} A_j=&\sum_{k}\min(r,k)\binom nk[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k=0}^rk\binom nk[x^j]x^k(1-x)^{n-k}+r\sum_{k>r}\binom{n}{k}[x^j]x^k(1-x)^{n-k}\\ \end{aligned} \]

对于后者:

\[\begin{aligned} &\sum_{k=0}^r\binom{n}{k}[x^j]x^k(1-x)^{n-k}\\ =&\sum_{k=0}^r[u^kx^j]\binom{n}{k}{(ux)}^k(1-x)^{n-k}\\ =&\sum_{k=0}^r[u^kx^j]((ux)+(1-x))^n\\ =&[u^rx^j]\frac{(ux+1-x)^n}{1-u}\\ =&[u^rx^j]\frac{((u-1)x+1)^n}{1-u}\\ =&\binom{n}{j}[u^r]\frac{(u-1)^j}{1-u}\\ =&\binom{n}{j}(-1)^{j-r}\binom{j-1}{r} \end{aligned} \]

对于前者也是类似的。

对于 \(B_j=\sum_{ij\leq d}c_{ij}\),其中 \(c_p=[x^{d-p}]\frac{1}{(1-x)^n}\)。这相当于一个高维后缀和(一维对应一个质数幂),可以做到 \(O(n\log \log n)\)

总时间复杂度 \(O(n\log \log n)\)

posted @ 2022-10-28 20:39  ez_lcw  阅读(14)  评论(0编辑  收藏  举报