ABC276G

\(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}\)。
浙公网安备 33010602011771号