[ARC160D] Mahjong 题解

大家都太卷了,跟不上要 AFO 了。

题目

题意

找到可以通过以下两种操作,使得长度为 \(N\)、元素之和为 \(M\) 的数列 \(A\) 全为 \(0\)\(A\) 的个数,再取模 \(998244353\)

  1. \(A\) 中选一个元素,将其减去 \(K\)
  2. \(A\) 中选取长度为 \(K\) 的子串,子串中每个元素减去 \(1\)
  • \(1\le K\le N\le2000\)
  • \(1\le M\le10^{18}\)

推导

首先如果不满足 \(m\equiv 0 \pmod k\) 那么无解。

反过来做,问题变成一个全为 \(0\) 的序列进行操作后的序列个数。

然后可以容易发现的是,\(k\) 个二操作等价于一个一操作,那么在这里我们可以加入限制,每个位置的二操作次数 \(\le k\),这样就避免了重复。

考虑把一个序列对应上一个操作序列,设 \(f[1,n-k+1]\) 表示二操作次数,\(g[1,n]\) 表示一操作次数。

有以下限制:

  • \(\sum_{i=1}^{n-k+1} f_i + \sum_{i=1}^{n} g_i = m\div k\)
  • \(\forall i \in[1,n-k+1],f_i < k\)

这里有个容斥,钦定有 \(i\) 个不合法,剩下的随便填。

\[ans=\sum_{i=0}^{n-k+1}(-1)^i{{n-k+1}\choose{i}}{{\frac{m}{k}-ik+2n-k}\choose{2n-k}} \]

posted @ 2024-03-15 11:44  point_fish  阅读(37)  评论(0)    收藏  举报