【ZJOI2020】抽卡

题目描述

\(\quad\) 传送门

题解


\(\quad\) 开始之前,先给出两个定义。

\(\quad\) 合法的定义:存在标号连续的 \(k\) 张牌。

\(\quad\) 不合法的定义:不存在标号连续的 \(k\) 张牌。

非满分方法一 : 期望得分 \(70\)

\(\quad\) \(\text{Min-Max}\) 容斥,都快烂大街了。这里就不讲了。

非满分方法二 : 期望得分 \(90\)

\(\quad\) 我们设 \(f_{i}\) 表示抽了 \(i\) 轮不合法的方案数目。

\(\quad\) 可以得到:

\[ans = \sum\limits_{i=0}^{\infty}\frac{f_{i}}{m^{i}} = 1+\sum\limits_{i=1}^{\infty}\frac{f_{i}}{m^{i}} \]

\(\quad\) 考虑抽了 \(i\) 轮以后有 \(R\) 张卡,那么可以得到:

\[f_{i} = \mathcal T(i,R)\mathcal P(R) \]

\(\quad\) 其中 \(\mathcal T(i,R)\) 代表抽了 \(i\) 轮抽到这 \(R\) 张卡的方案数目,\(\mathcal P(R)\) 代表在 \(m\) 张卡中抽 \(R\) 张卡不合法的方案数目。

\(\mathcal T(i,R)\) 的答案显然,即:

\[\mathcal T(i,R) = \sum\limits_{t=0}^{R-1}(-1)^{t}{R \choose t}(R-t)^{i} \]

\(\quad\) 带入暴力求和可以发现最后是一个 \(\text{NTT}\) 可以处理的形式,设那个部分 \(\text{NTT}\) 的结果为 \(\mathcal H(i)\),最后的答案为:

\[ans = 1+\sum\limits_{i=1}^{m}\mathcal H(i)\mathcal P(i) \]

\(\quad\) 问题在于怎么求解 \(\mathcal P\) ,我们把长度为 \(m\) 的段先成一段一段连续的部分,最后 \(\text{NTT}\) 合并即可。

\(\quad\) 我们不妨设当前段的长度为 \(n\)。考虑 \(\mathcal P(i)\)组合意义。就是把 \(i\) 个无标号的小球放入 \(n-i+1\) 有标号的盒子当中的方案数目。

\[\mathcal P(i) = \sum\limits_{t=0}^{\lfloor{\frac{i}{k}}\rfloor}(-1)^{t}{n-i-1 \choose t}{n-tk \choose i-tk} \]

\(\quad\) 直接暴力计算,可以得到这个算法的瓶颈复杂度为 \(\mathcal O(\dfrac{m^2}{k}+m\log_2^2m)\)

满分做法一

\(\quad\) 我们尝试考虑 一个连续段不合法方案 的生成函数:

\[[x^{n-r+1}](\sum\limits_{i=0}^{k-1}x^i)^r \]

\(\quad\) 上面的式子的含义解释如下:我们选出一段卡牌,然后强制后一个不选,但是强制选出的卡牌又不能超过 \(k\) 个,然后我们枚举有 \(r\) 张卡牌强制不选,那么前面 \([x^{n-r+1}]\) 的含义就是选出 \(n-r+1\) 张卡牌不合法的方案数。

\(\quad\) 我们转换一下上面的式子:
特性它

\[[x^{n+1}]\left(x\sum\limits_{i=0}^{k-1}x^i\right)^r \]

\(\quad\) 我们令:

\[G(x) = x\sum\limits_{i=0}^{k-1}x^i =\frac{x^{k+1}-x}{x-1} \]

\(\quad\) 我们可以得到就是要求这个:

\[[x^{n+1}]\left(G(x)\right)^r \]

\(\quad\) 我们考虑二元生成函数:

\[H(u,G(x)) = \frac{1}{1-uG(x)} \]

\(\quad\) 我们提取 \(H(u,x)\)\(n+1\) 项系数即可。 那么这么做为什么是对的呢?我们可以这么看:

\[[x^{n+1}]H(u,G(x)) = [x^{n+1}]\sum\limits_{r}u^r(G(x))^r \]

\[=\sum\limits_{r}[x^{n+1}](G(x))^ru^r \]

\(\quad\) 我们发现,因为 \(G\) 的常数项系数为 \(0\) ,所以当 \(r \ge n+1\) 的时候,\([x^{n+1}](G(x))^r = 0\),所以我们这么做是对的。

\(\quad\) 那么虽然我们知道要提取系数,但是我们真的不知道要怎么处理。其实这个式子已经在暗示我们用拉格朗日反演了,因为它只要求某一项的系数。

\(\quad\) 所以我们可以使用拓展拉格朗日反演,我们可以得到:

\[[x^{n+1}]H(u,G(x)) = \frac{1}{n+1}[x^n]\frac{u}{(1-ux)^2} \left(\frac{x}{G^{-1}(x)}\right)^{n+1} \]

\(\quad\) 其中 \(G^{-1}(x)\)\(G(x)\) 的复合逆,我们可以用 \(O(n\log_2n)\)\(\text{Newton}\) 迭代解出。

\(\quad\) 我们尝试把中间带 \(u\)这个打开,那么我们可以得到:

\[[x^{n+1}]\sum\limits_{r}u^r(G(x))^r=\frac{1}{n+1}\sum\limits_{r}[x^n](r+1)u^{r+1}x^r\left(\frac{x}{G^{-1}(x)}\right)^{n+1} \]

\(\quad\) 所以,我们现在直接比对两边的 \(u\) 的系数即可得到:\((G(x))^r\)

\(\quad\) 特别注意,我们这里 \((G(x))^r\) 的意义为:选出 \(n-r+1\) 张卡牌不合法的方案数。所以最后一定要反转系数!

满分做法二

\(\quad\) 我不会这个奇怪的组合意义...如果未来是水平到了这个地步我会来填坑的...

\(\quad\) 答案的生成函数为:

\[f = \sum\limits_{u\ge 0}(-x^k)^{u}(1+x)^{n-(k+1)u}{n-ku \choose u}+\sum\limits_{u \ge 1}(-x^{k})^{u}(1+x)^{n-(k+1)u+1}{n-ku \choose u} \]

\(\quad\) 可以直接采用分治 \(\text{NTT}\) 解决。

满分做法三

\(\quad\) 深入分析 \(\text{Min-Max}\) 容斥,可以将其复杂度优化至 \(\mathcal O(\dfrac{m^2}{k^2})\) 。然后可以发掘 \(\mathcal H\) 的一个 \(\mathcal O(m\log_2^2m)\) 的做法,可以避免牛顿迭代。但是我不会,以后有空补上...

posted @ 2020-11-13 17:01  蒟蒻tyy  阅读(252)  评论(2)    收藏  举报