「解题报告」ARC145F Modulo Sum of Increasing Sequences

下面记 \(mod\)\(p\)

单调不降这个限制很烦人,所以我们首先 给第 \(i\) 位加上 \(i-1\),这样就变成了严格单调递增序列。

值域为 \([0, n + m - 1]\),长度为 \(n\) 的严格单调递增序列,就可以看作从 \([0, n + m - 1]\) 中选 \(n\) 个数。

注意此时和整体增加了 \(n(n-1) \over 2\),所以最后计算出答案之后记得把它弄回去。

我们可以设计一个 DP:设 \(f_{i, j, k}\) 表示前 \(i\) 个数选择了 \(k\) 个数,和为 \(j\)。那么我们容易写出式子:

\[f_{i,j,k} = f_{i-1,j,k} + f_{i-1,j - i\ \bmod\ p,k - 1} \]

然后就大力写成二元生成函数:

\[F_i(x, y) = F_{i-1}(x, y)(1 + x^iy) \pmod {x^p - 1} \]

\(\pmod {x^p - 1}\) 就是关于 \(x\) 进行循环卷积,以防有人和我一样没见过这个写法。

那么我们要求的答案就是:

\[ans_i = [x^iy^n] \prod_{i=0}^{n+m-1}(1+x^iy) \pmod {x^p-1} \]

我们先记 \(M = n + m\)。这个上标很离谱,而由于是循环卷积,\(x^{p + i} \equiv x^i\),所以我们考虑分块地去求这个东西。

所以我们先考虑当 \(p | M\) 的时候这个东西怎么做。

那么:

\[\begin{aligned} ans_i &= [x^iy^n] \prod_{i=0}^{M-1}(1+x^iy) \pmod {x^p-1}\\ &= [x^iy^n] \left(\prod_{i=0}^{p-1}(1+x^iy)\right)^{\frac{M}{p}} \pmod {x^p-1}\\ \end{aligned} \]

如果直接考虑它的系数就又拆回原来的 DP 式子了,所以直接考虑系数这条道行不通。考虑求点值然后再插回原多项式。由于有循环卷积,我们就考虑带入单位根 \(\omega_p^i\)

\(G(x) = [y^n]\left(\prod_{i=0}^{p-1}(1+x^iy)\right)^{\frac{M}{p}} \pmod {x^p-1}\),那么我们现在要求的就是 \(G(\omega_p^0), G(\omega_p^1), \cdots, G(\omega_p^{p - 1})\)

那么我们考虑 \(G(\omega_p^k)\)

\[\begin{aligned} G(\omega_p^k) = [y^n]\left(\prod_{i=0}^{p-1}(1+\omega_p^{ik}y)\right)^{\frac{M}{p}} \pmod {x^p-1} \end{aligned} \]

我们发现,对于这个单位根的上标 \(ik\),它恰好取遍了 \(i\gcd(k, p)\) 每个值 \({\gcd(k, p)}\) 次。令 \(d = \gcd(k, p)\),那么有:

\[\begin{aligned} G(\omega_p^k) &= [y^n]\left(\prod_{i=0}^{p-1}(1+\omega_p^{ik}y)\right)^{\frac{M}{p}} \pmod {x^p-1}\\ &= [y^n]\left(\prod_{i=0}^{\frac{p}{d}-1}(1+\omega_p^{id}y)\right)^{\frac{Md}{p}} \pmod {x^p-1}\\ &= [y^n]\left(\prod_{i=0}^{\frac{p}{d}-1}(1+\omega_{\frac{p}{d}}^{i}y)\right)^{\frac{Md}{p}} \pmod {x^p-1}\\ \end{aligned} \]

我们把里面这个东西单独拿出来考虑:\(\prod_{i=0}^{n-1} (1 + \omega_n^i y)\)

考虑单位根的意义:单位根 \(\omega_n^i\) 就是 \(x^n=1\) 的解。也就是说 \(x^n-1\) 可以因式分解为 \(\prod_{i=0}^{n - 1}(x - \omega_n^i)\)

那么就有:

\[\begin{aligned} x^n-1 &= \prod_{i=0}^{n - 1} (x - \omega_n^i) \\ (-1)^n (x^n-1) &= \prod_{i=0}^{n - 1} (-x + \omega_n^i) \\ (-1)^n (x^n-1) y^n&= \prod_{i=0}^{n - 1} (-xy + \omega_n^iy) \\ \end{aligned} \]

\(x = -\frac{1}{y}\),那么有:

\[\begin{aligned} (-1)^n \left(\left(\frac{1}{y}\right)^n-1\right) y^n &= \prod_{i=0}^{n - 1} (1 + \omega_n^iy) \\ \prod_{i=0}^{n - 1} (1 + \omega_n^iy) &= 1 - (-y)^n \end{aligned} \]

将这个带回原式子:

\[\begin{aligned} G(\omega_p^k) &= [y^n]\left(1 - (-y)^n\right)^{\frac{Md}{p}} \pmod {x^p-1}\\ &= [y^n]\sum_{i=0}^{\frac{Md}{p}}\binom{\frac{Md}{p}}{i}(-1)^i(-y)^{ni} \pmod {x^p-1}\\ &= \begin{cases} \binom{\frac{Md}{p}}{\frac{nd}{p}}(-1)^{\frac{nd}{p} + n} &p | nd\\ 0 &\textrm{otherwise} \end{cases} \end{aligned} \]

于是到这里我们就计算出了 \(G(\omega_p^k)\) 了。

接下来,我们需要做一步 IDFT。但是 \(\omega_p\) 在模意义下不一定存在,所以我们不能直接做 IDFT。

那么我们把 IDFT 的式子写出来:

\[g_i = \frac{1}{p} \sum_{j=0}^{p - 1} G(\omega_p^j) \omega_p^{-ij} \]

我们需要想办法避免复数。注意到 \(G(\omega_p^i)\) 实际上只与 \(\gcd(i, p)\) 有关,所以我们可以枚举 \(\gcd(i, p)\)

\[\begin{aligned} g_i &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{j=0}^{p - 1}[\gcd(j, p) = d] \omega_p^{-ij}\\ &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{j=0}^{\frac{p}{d} - 1}[\gcd(j, \frac{p}{d}) = 1] \omega_p^{-ijd}\\ &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \sum_{j=0}^{\frac{p}{kd} - 1}\omega_p^{-ijdk}\\ &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \sum_{j=0}^{\frac{p}{kd} - 1}\omega_{\frac{p}{kd}}^{-ij}\\ &= \frac{1}{p} \sum_{d | p} G(\omega_p^d) \sum_{k | \frac{p}{d}}\mu(k) \left[\frac{p}{kd} | i\right] \frac{p}{kd} \end{aligned} \]

最后一步是单位根反演,如果不会的可以去搜一下(其实我不会)就是一个式子 \([n|k] = \frac{1}{k}\sum_{i=0}^{n - 1} \omega_n^{ik}\)

证明也很简单,如果 \(n | k\),那么 \(\omega_n^{ik} = 1\),原式就等于 \(1\),否则等比数列求和可得等于 \(0\)

那么 \(g_i\) 就可以 \(O(p)\) 的计算出来了。(枚举一步因子是 \(O(\sqrt{p})\) 的)

那么我们就可以在 \(O(p^2)\) 的复杂度内计算出原来的大式子了。

这样 \(p | M\) 的情况就做完了。考虑还有 \(q = M \bmod p\) 项,而因为我们要求 \([y^n]\),所以我们只需要计算 \(n - q \sim n\) 时的答案,后面的几项暴力乘起来即可。再加上预处理阶乘的复杂度 \(O(n + m)\),总复杂度就是 \(O(n + m + p^3)\)

posted @ 2022-12-31 16:50  APJifengc  阅读(245)  评论(0编辑  收藏  举报