ABC241H Card Deck Score 题解

\(N\) 种牌,第 \(i\) 种牌有 \(B_i\) 张,每张权值为 \(A_i\),请从 \(\sum B_i\) 张牌中选出 \(M\) 张牌,每一种选择方案的贡献为所有牌的权值之积,求所有方案的贡献之和,对 \(998244353\) 取模。
\(N \le 16, M \le 10^{18},1 \le A_i \le 998244353, 1 \le B_i \le 10^{17}, M \le \sum B_i\),保证 \(A_i\) 互不相同。


  数学 生成函数

  这个题又告诉我,我的生成函数有多么弱/kk。

  考虑对于每一个牌写出生成函数:

\[F_i(x) = \sum_{j = 0}^{B_i} A_i^{j}x^j = \frac{1 - A_i^{B_i + 1}}{1-A_ix} \]

  于是我们要求的答案就是:

\[[x^m]\prod_i F_i(x) = [x^m]\frac{\prod_i 1 - A_i^{B_i + 1}}{\prod_i 1 - A_ix} \]

  因为 \(N\) 比较小,于是我们可以轻松地通过枚举子集求出分子部分。

  现在重点求分母部分:

  因为除法不是很好解决的,于是我们可以将 \(\frac{1}{\prod_i 1 - A_ix}\) 尝试化成: \(\sum_i \frac{c_i}{1 - A_ix}\),这样就可展开成为 \(\sum_i c_i \sum_{t = 0}^{\infty} A_i^tx^t\)

  现在,有等式:

\[\frac{1}{\prod_i 1 - A_ix} = \sum_i \frac{c_i}{1 - A_ix} \]

  我们可以同时乘上 \(\prod_i 1 - A_ix\),然后就是:

\[1 = \sum_i c_i \prod_{j \neq i} (1 - A_jx) \]

  我们尝试代入特殊值,将 \(x = A_1^{-1}, A_2^{-1}, \dots,A_n^{-1}\)代入原式,然后我们会发现:

\[c_i = \frac{1}{\prod_{j \neq i} 1 - A_jA_i^{-1}} \]

  然后就求出分子了,将两个生成函数相乘然后求 \(x^m\) 的系数即可。

  代码

posted @ 2022-03-06 16:23  Werner_Yin  阅读(130)  评论(7编辑  收藏  举报