ARC156E

给定 \(n, m, k\),对于长度为 \(n\) 的序列 \(X\)\(X\) 是好序列当且仅当: \(0 \le X_i \le m, \sum X_i \le k\) 且存在满足以下条件的的图 \(G\)

  • \(G\) 是有 \(n\) 个顶点的无向图(从 \(1\) 开始编号),不包含自环。
  • \(G\) 中第 \(i\) 个点的度数为 \(X_i\)
  • \(G\) 中第 \(i\) 个点不与 \(i + 1\) 连边(\(1, n\) 不连边。)

求好序列 \(X\) 的数量对 \(998244353\) 取模的结果。

\(n, m \le 3000, k \le nm, n \ge 4\)

ARC156E

充要条件

还是老套路,考虑转化好序列的条间。

\(s = \sum X_i\),那么 \(s\) 一定是偶数,有 \(c = \frac{s}{2}\) 条边。

如果 \(G\) 没有第三个条件,只需要任意 \(X_i \le c\) 即可,随便连边都行。

加上了第三个条件,因为没有 \((i, i + 1)\),那么一定有 \(X_i + X_{i + 1} \le c\)(每条边只能占一端)。这是一个必要条件

再从构造的角度,我们尝试边一条一条的加进去,一直满足这个必要条件。每次随便选取一个 \(X_i, X_j \ge 1\),连一条边,然后将他们减一,如果出现 \(X_i + X_{i + 1} = c\) 的情况就把剩下的边都连给 \(i, i + 1\) 即可。

所以我们就证明了这个 \(X_i + X_{i + 1} \le c\)\(G\) 存在的充要条件。

计数

对于任意 \(i\) 都满足 \(X_i + X_{i + 1} \le c\),这个不好计算。考虑使用容斥原理。用总方案数 - “存在一个 \(i\),满足 \(X_i + X_{i + 1} > \frac{s}{2}\)” + "存在 \(i, j\),满足 \(X_i + X_{i + 1} > \frac{s}{2}, X_j + X_{j + 1} > \frac{s}{2}\)" \(- \dots\)

然后发现省略号中的项都是 \(0\),只需要计算这三项即可。

\(f = (1 + x + x^2 + \dots + x^m)^n = \frac{1 - x^{m + 1}}{1 - x}\),为每个 \(X_i\) 的生成函数。

总方案数

\[\begin{aligned} \sum\limits_{s \!\!\!\mod \!\!2 = 0, 0\le s \le k} [x^s] f^n &= \sum\limits_{s \!\!\!\mod \!\!2 = 0, 0\le s \le k} [x^s] \left(\frac{1 - x^{m + 1}}{1 - x}\right)^n &(1) \\ &= [x^k] \frac{1}{1 - x^2} \left(\frac{1 - x^{m + 1}}{(1 - x)}\right)^n &(2) \end{aligned} \]

\((1)\) 推,将分子、分母都暴力展开,枚举两个指数(要求和为偶),组合数算一下系数即可。时间复杂度:\(O(n^2)\)

\((2)\) 推,\(O(n)\) 算出 \((1 - x^{m + 1})^n\) 的系数,并乘上 \(\frac{1}{1 - x^2}\)\(O(k)\) 做前缀和),\(\frac{1}{(1 - x)^{n}}\) 使用牛顿二项式定理展开。最后枚举 \(\frac{(1 - x^{m + 1})^n}{1 - x^2} 或 \frac{1}{(1 - x)^n}\) 的指数,计算一下系数即可。时间复杂度:\(O(n + k)\)

存在一个 \(i\),满足 \(X_i + X_{i + 1} > \frac{s}{2}\)

不妨设 \(i = 1\),设 \(t = X_i + X_{i + 1} \le 2m\),将 \(x_1, x_2\) 以及 \(x_3 \sim x_n\) 分开计算。

枚举 \(t\),令 \(k \leftarrow \min(2t - 2, k - t)\),和总方案数一样的做法。(可以 \(O(n\max{k} = nm)\) 预处理出 \(x_3 \sim x_n\) 对应的部分 \(\frac{1}{1 - x^2}f^{n - 2}\),枚举 \(t\) 可以 \(O(1)\) 调用 \([x^k]\)

最后别忘了需要乘上 \(n\),因为钦定了 \(i = 1\)

存在 \(i, j\),满足 \(X_i + X_{i + 1} > \frac{s}{2}, X_j + X_{j + 1} > \frac{s}{2}\)

钦定 \(1 \le i < j < n\),则一定有 \(j = i + 1\),即 \(X_1 + X_2, X_2 + X_3 > \frac{s}{2}\)

如果枚举了 \(X_2\)\(X_1, X_3\) 对应生成函数:\(g = (x^a + x^{a + 1} + \dots + x^{m}) = x^a\frac{1 - x^{m - a + 1}}{1 - x}, a = 1 + \frac{s}{2} - X_2\)

可以枚举 \(a\)\(O(m)\) 预处理 \(g^2f^{n - 3}\)(可预先算出 \(\frac{1}{(1 - x)^2}f^{n - 3}\),然后每次乘 \(x^{2a}(1 - x^{m - a})^2\))。枚举 \(X_2\)\(O(1)\) 查询 \([x^{s - X2}]\) 即可。

时间复杂度是平方级别的,具体的懒得算了,看代码实现。

总结

小清新题目,思路还是比较明晰的,先搞出充要条件,可能容斥要想一下,然后就是神秘的分类讨论 + 生成函数题了。

写起来一堆细节,吐了。

posted @ 2026-01-15 22:32  xiehanrui0817  阅读(0)  评论(0)    收藏  举报