题解:AT_agc058_d [AGC058D] Yet Another ABC String

题目要求在总长度 \(n=A+B+C\) 的排列中统计既定字母数且完全不出现子串 ABCBCACAB 的方案数,结果对 \(998244353\) 取模。核心做法是把三个禁止的视作一个循环串 \(A\to B\to C\to A\) 上长度为 \(3\) 的滑动窗口,用容斥原理把出现至少一段非法三连转化为精确出现 \(i\) 段非法三连的加减和。若钦定了 \(i\) 段非法块,就先把每块末尾的三个固定字母拿掉,剩余 \(m=n-3i\) 个位置用插板法在整体中穿插;此时需要放 \(A-i\)A\(B-i\)B\(C-i\)C,排列数为 \(\binom{m}{A-i}\binom{m-(A-i)}{B-i}\)。随后把被抽出的三元锚点插回串中:锚点之间共有 \(m+i\) 个隔板,一次性选出 \(i\) 个隔板可用 \(\binom{m+i-1}{i}\);每段末尾的三个字母里前两位已经确定,第 \(3\) 位只能在两种合法字母里选,所以有额外 \(2^i\);若最左侧锚点左边没有字符则多出一种选法,需要补上一项 \(\binom{m+i-1}{i-1}2^{i-1}3\)。整理后第 \(i\) 项贡献为

\[(-1)^i\bigl[\binom{m}{A-i}\binom{m-(A-i)}{B-i}\bigr]\bigl[\binom{m+i-1}{i}2^{i}+\mathbf 1_{i\ge1}\binom{m+i-1}{i-1}2^{i-1}3\bigr] \]

枚举 \(i=0\ldots\min\{A,B,C\}\) 累加即可。

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

link

posted @ 2025-07-20 19:52  薛儒浩  阅读(19)  评论(0)    收藏  举报