AtCoder Regular Contest 156

B. Mex on Blackboard

题目大意

给定 \(N\) 个元素的数组 \(A\),每次操作你可以从数组中选出任意个元素,然后向数组中加入这些元素的 \(mex\)

\(K\) 次操作后,可以得到多少种不同的数组。

思路

假如你能向数组中加入 \(x\)\(x\) 是你写的最大整数,那么数组中 \(0\sim x-1\) 绝对都出现过一次。 因为如果 \(x-1\) 不存在的话加入的数会变成 \(x-1\) 。第一次写入 \(x\) 后,之后就可以加入 \(0\)\(x\) 之间的任何整数。

观察到值域不大,考虑枚举最大整数 \(x\)。设你需要 \(cnt\) 次才能写下 \(x\) 这个数,那么你写下 \(x\) 这个数后就还剩 \(K-cnt\) 次操作机会,问题转化成使用 \(K-cnt\) 次操作,每次操作写下 \(0\sim x\) 任意一个数,问最后有多少个多重集合。

这不就等价于 \(n\) 个小朋友分 \(m\) 个苹果吗?(在这里 \(n=x+1\)\(m=K-cnt\))。当然不保证 \(n\) 个小朋友每个都要分至少一个苹果。排列组合经典问题,\(n\) 个小朋友分 \(m\) 个苹果 $ \ = \ $ \(n+m\) 个小朋友分 \(m\) 个苹果且每个小朋友至少一个。

则答案为 \({C(}^{\ \ \ m-1}_{n+m-1})\),在这里答案就为 \({C(}^{ \ \ \ \ \ \ \ x}_{K-cnt+x})\)

参考代码:code

posted @ 2023-02-21 16:53  Otue  阅读(43)  评论(0编辑  收藏  举报