ABC276G

image

\(n, m \le 10^7\)

补充 \(a_0 = 0, a_{n + 1} = m\)

我们对 \(a\) 数组进行差分,得到 \(b\),则题目条件转化为:

  • \(b_i > 0, 3 \nmid b_i\)
  • \(b_1 + b_2 + \dots + b_n + b_{n + 1} = m\)

\(b_1, b_{n + 1}\) 对应的生成函数为 \(1 + x + x^2 + \dots = \frac{1}{1 - x}\)\(b_2 \sim b_n\) 对应的生成函数为 \((1 + x + x^2 + \dots) - (1 - x^3 - x^6 - \dots) = \frac{1}{1 - x} - \frac{1}{1 - x^3} = \frac{x + x^2}{1 - x^3}\),因此答案就是:

\[[x^m]\frac{1}{(1 - x) ^ 2}(\frac{x + x^2}{1 - x^3})^{n - 1} = [x^{m - n - 1}]\frac{(1 + x)^{n - 1}}{(1 - x)^2} \frac{1}{(1 - x^3)^{n - 1}} \]

\(\dfrac{(1 + x)^{n - 1}}{(1 - x)^2}\) 其实就是对 \((1 - x)^{n - 1}\) 做两次前缀和,是可以预处理出来的。然后枚举 \(\dfrac{1}{(1 - x^3)^{n - 1}}\) 的系数即可。

时间复杂度:\(O(n + m)\).

实际上如果不补充 \(b_{n + 1}\) 也是可以的,做不过将第二个条件改为前缀和而已。侧面也应证了做前缀和就是乘上 \(\frac{1}{1 - x}\)

posted @ 2026-01-13 21:57  xiehanrui0817  阅读(1)  评论(0)    收藏  举报