ARC145F Modulo Sum of Increasing Sequences 解题记录

题意:

给定 \(n,m,M\),对每个 \(k \in [0,M-1]\) 求有多少个长度为 \(n\) 的不降序列 \(A\),满足:

  1. \(A_i \in [0,m]\)
  2. \(\sum A_i \bmod M = k\)

\(1 \le n,m \le 10^6\)

\(1 \le M \le 500\)


题意看上去非常典。

首先给第 \(i\) 个位置上的数字加上 \(i-1\),那么就变成了上升序列。

下面令 \(m \to m+n-1\),剩下的问题是一个经典的单位根反演。

考虑 \(m\)\(M\) 倍数的情况,可以知道答案显然是:

\[[x^{k+aM}y^n] \prod_{i=0}^{m}(1+x^iy) \]

施加单位根反演,令 \(F(x)=[y^n]\prod_{i=0}^m (1+x^iy)\)

即我们需要对每个 \(k\) 求得:

\[g_k=\sum_i f_i [M | i-k]\\ =\sum_i f_i \dfrac{\sum_{j=0}^{M-1} w_{M}^{j(i-k)}}{M}\\ \]

提出这个 \(\dfrac{1}{M}\) 在最后计算。

\[=\sum_{j=0}^{M-1} w_M^{-jk} \sum_i f_i w_{M}^{ij}\\ =\sum_{j=0}^{M-1} w_M^{-jk} F(w_M^j) \]

我们考虑展开 \(F\)

\[=\sum_{j=0}^{M-1} w_M^{-jk} [y^n]\prod_{i=0}^m (1+w_M^{ij}y) \]

\(d=\gcd(j,M)\),可得:

\[=\sum_{j=0}^{M-1} w_{M/d}^{-jk/d} [y^n]\prod_{i=0}^m (1+w_{M/d}^{ij/d}y) \]

枚举 \(t=M/d\),则:

\[=\sum_{t|M} \sum_{j=0}^{t-1} [(j,t)=1] w_{t}^{-jk} [y^n]\prod_{i=0}^m (1+w_{t}^{ij}y) \]

考虑后面的式子,因为我们有 \((j,t)=1\),因此直接有:

\[\prod_{i=0}^{t-1} (1+w_{t}^{ij}y)=1-(-y)^t \]

(考察 \(y^t=1\) 的因式分解。)

\[=\sum_{t|M} \sum_{j=0}^{t-1} [(j,t)=1] w_{t}^{-jk} [y^n] (1-(-y)^t)^{m/t} \]

\(n\)\(t\) 的倍数,答案显然是:

\[Ans=\sum_{t|M,n} \sum_{j=0}^{t-1} [(j,t)=1] w_{t}^{-jk} \binom{m/t}{n/t}(-1)^{(n/t)(t+1)} \\ =\sum_{t|M,n} \binom{(m+1)/t}{n/t}(-1)^{n+n/t}\sum_{j=0}^{t-1} [(j,t)=1] w_{t}^{-jk} \]

注意到 \(\sum_{j=0}^{t-1} w_{t}^{-jk}=\sum_{d|t} \sum_{j=0}^{d-1} [(j,d)=1]w_{d}^{-jk}\).

直接运用莫比乌斯反演可得:

\[\sum_{j=0}^{t-1} [(j,t)=1]w_{t}^{-jk} = \sum_{d|t} \mu(t/d) \sum_{j=0}^{d-1} w_{d}^{-jk}=\sum_{d|t} \mu(t/d)[d|k]d \]

因此上式等于

\[\sum_{t|M,n} \binom{(m+1)/t}{n/t}(-1)^{n+n/t}\sum_{d|t,k} \mu(t/d)d \]

\(w=\lfloor\dfrac{m}{M}\rfloor\times M\),考虑计算 \((w,m]\) 的贡献。

大力 dp 出 \((w,m]\) 内,使用的数字个数;\(\bmod M\) 的值;此时的方案数。

预处理后面一个 \(\sum\) 的值,即可在 \(O(n+m+M^3\ln M)\) 的时间内通过此题。

事实上会被卡常,精心思考一下,可以去掉那个 \(\ln\)

随机卡卡常其实也可以过。

posted @ 2022-09-19 11:00  一般通过小萌新  阅读(75)  评论(1编辑  收藏  举报