Loading

AT_agc058_d [AGC058D] Yet Another ABC String

这容斥是人类能想到的啊。

考虑对于极长不合法串进行容斥,则有对 BCABCABC... 这种串进行容斥,常见手法是对于长度为 \(x\) 的串 \(s'\),给其一个 \(f_x\) 的容斥系数,使得全部计算完之后恰只算了长度为 \(1\) 和长度为 \(2\) 的这种串。令 \(F(x)\) 为关于 \(f\) 的生成函数,则有:

\[\sum_{i \ge 1}F(x)^i = x + x^2 \]

解得:

\[F(x) = 1 - \frac{1}{1 + x + x^2} \]

将其展开后可得到 \(0, 1, 0, -1, 1, 0, -1, 1, 0, -1, ...\),由于 \(f_0\) 我们不是很关心,所以就是一个长度为 \(3\) 的循环节,可以很快求出来。

考虑最后一段咋办,这种连续段 DP 大概率到了最后仍然是一个无法优化的复杂度,干脆一上来直接上 GF。

设三元生成函数:

\[G(xyz) = -3\sum_{i\ge1}(xyz)^i + (x + y + z)\sum_{i\ge 0}(xyz)^i \]

\(-3\) 是因为对于 \(3\) 的倍数的串开头有 A, B, C 三种可能。

则答案为:

\[ans = [x^Ay^Bz^C]\sum_{i \ge 0}G(xyz)^i \]

考虑到用封闭形式描述这一过程,得到:

\[G(xyz) = \frac{x + y + z - 3xyz}{1 - xyz} \]

则答案变为求:

\[[x^Ay^Bz^C]\frac{1 - xyz}{1 - x - y - z + 2xyz} = [x^Ay^Bz^C](1 - xyz)(\sum_{i \ge 0}(x + y + z - 2xyz)^i) \]

枚举右边 \(-2xyz\) 的贡献即可。

感觉对于生成函数理解的下界不是很明白,对于答案式的表达以及答案的求法不太理解。

posted @ 2026-01-16 10:23  Alexande  阅读(3)  评论(0)    收藏  举报