AGC058D Yet Another ABC String

link

由于限制是循环的考虑用连续段容斥。直接容斥的做法是枚举一组限制,并带上 \((-1)^c\) 的系数:某些相邻的三个数必须 \(\in 123, 231, 312\),相交的限制会互相影响得到连续段。

直接枚举连续段,设长度为 \(i\) 的连续段系数为 \(f(i)\),连续段中最后三个数的限制必须选择,选了之后枚举下一个选的位置,可以得到递推式 \(f(i) = -(f(i-1)+f(i-2))\),归纳得 \([f(i)] = [1, 0, -1, 1, 0, -1, \dots]\)

\(n = A +B + C\),直接算是 \(O(n^2)\) 的,不过可以写生成函数:$$F(x)=\frac{1}{1-\frac{a+b+c-3abc}{1-abc}}$$

\(1 - abc\) 移到分子上可以 \(O(n)\) 算。

posted @ 2022-08-16 19:45  RiverHamster  阅读(236)  评论(0编辑  收藏  举报
\