ARC160D

\(k \le n \le 2000, m \le 10^{18}\)
正常的思路就先转化一下这两种操作,但是这个题要考虑给将 \(A\) 与操作序列配对,即一个 \(A\) 对应几个操作序列,这样就能将 \(A\) 的数量转化为操作序列的数量,这显然好算很多。
观察一下这两种操作,如果第二种操作对于同一个 \([l, l + k - 1]\) 做了 \(\ge k\) 次,可以直接转化为第一种操作。于是为了避免从夫,可以规定对于每个 \(l\),进行第二次操作的次数 \(< k\)。这样每个 \(A\) 对应的操作序列(不记顺序,只算个数)时固定的,自证不难。
如何计算有多少种操作序列?如果 \(k \nmid m\),显然答案为 \(0\),后令 \(m \leftarrow \frac{m}{k}\)。
那么就是可以进行一操作/二操作共 \(m\) 次,且一个位置进行的二操作次数不超过 \(k - 1\) 次。
用生成函数刻画这个问题十分合适。
- 对于一操作,每个位置的生成函数都是 \(1 + x + x^2 + \dots = \frac{1}{1 - x}\)。
- 对于二操作,每个位置的生成函数都是 \(1 + x + x^2 + \dots + x^{k - 1} = \frac{1 - x^{k}}{1 - x}\)
所以这个问题的答案就是:
\[[x^m](\frac{1}{1 - x})^n(\frac{1 - x^k}{1 - x})^{n - k + 1} = [x^m] \frac{(1 - x^k)^{n - k + 1}}{(1 - x)^{2n - k + 1}}
\]
将上下两部分都展开,枚举分子部分 \(x\) 的指数,得到下部分的指数,然后就算组合数了。
因为 \(m\) 很大,不能直接计算,但分母部分的组合数都是形如 \(\binom{r + 2n - k}{r} = \binom{r + 2n - k}{2n - k}\),可以在 \(O(n)\) 的时间暴力算出来。
时间复杂度:\(O(n^2)\)。
浙公网安备 33010602011771号