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\) 的贡献即可。
感觉对于生成函数理解的下界不是很明白,对于答案式的表达以及答案的求法不太理解。

浙公网安备 33010602011771号