ABC422G

第一问

即求 \(A x+B y+C z=N\),且 \(x,y,z\ge0\) 的方案数。

直接 DP 即可。\(f(i,j)\) 表示前 \(i\) 个盒子一共放了 \(j\) 个球,其中 \(1\le i\le 3\)

时间复杂度 \(O(N)\)

第二问

相当于求

\[\sum_{A x + B y + C z = N} \frac{N!}{(A x)!(B y)!(C z)!} \]

考虑根号分治:

  • 一方面,我们可以枚举 \(x,y\),然后算出 \(z\) 并计算贡献。时间复杂度为 \(O(\frac{N^2}{AB})\)
  • 另一方面,我们可以先做一个 DP 把前两个盒子分配好:\(f(i,x,y)\) 表示考虑了前 \(i\) 个球且只能往 \(A,B\) 盒子里放球,且两个盒子里的球数 \(\mod A,\mod B\) 分别为 \(x,y\) 的方案数,最后答案即为 \(\sum_{z}\binom{N}{Cz}\times f(N-Cz,0,0)\)。时间复杂度 \(O(N A B)\)

\(A \times B \ge \sqrt{N}\) 时用算法一,\(A \times B \le \sqrt{N}\) 时用算法二即可。时间复杂度 \(O(N^{1.5})\)

https://atcoder.jp/contests/abc422/submissions/69165517

posted @ 2025-09-08 18:28  云浅知处  阅读(170)  评论(1)    收藏  举报