P3214 [HNOI2011] 卡农

整理下题目的三个条件:

  • 选出的 \(m\) 个集合都不为空。
  • 不存在完全相同的两个集合。
  • 元素 \(1,2,\dots,n\) 在所有的集合出现的次数均为偶数。

首先,计算有序的集合是相对容易的,只需最后除以 \(m!\) 即可。

\(f_{i}\) 表示考虑前 \(i\) 个集合满足以上三个条件的方案数。

从条件 \(3\) 入手,不难发现倘若确定了前 \(i-1\) 个集合,那么要满足性质 \(3\),第 \(i\) 个集合只有一种情况。

因此可以写出一个式子 \(A_{2^{n}-1}^{i-1}\),它表示前 \(i - 1\) 个集合满足条件 \(1,2\),前 \(i\) 个集合满足条件 \(3\) 的方案数。

这样做后存在一些非法情况,分别计算即可:

  • \(i - 1\) 个集合满足条件 \(1,2\),第 \(i\) 个集合为空的方案数:由于第 \(i\) 个集合为空,那么前 \(i-1\) 个集合恰好满足条件 \(3\),因此方案数为 \(f_{i-1}\)
  • \(i - 1\) 个集合满足条件 \(1,2\),第 \(i\) 个集合与前面的集合相同的方案数:由于前 \(i-1\) 个集合互不相同,不妨设记 \(j\) 表示第 \(i\) 个集合恰好与第 \(j\) 个集合相同。由于第 \(i\) 个集合与第 \(j\) 个集合相同,因此除去它们外恰好又满足条件 \(3\),即为 \(f_{i-2}\)。第 \(i\) 个集合有 \(2^{n}-1-(i-2)\) 种选法(因为必须与那 \(i-2\) 个集合不同)。而 \(j\) 又有 \(i-1\) 种取值。因此最终方案数为 \(f_{i-2} \times (2^{n}-1-(i-2)) \times (i-1))\)

因此得出 \(O(1)\) 递推式子:

\[f(i)=A_{2^{n}-1}^{i-1}-f_{i-1}-f_{i-2} \times (2^{n}-1-(i-2)) \times (i-1)) \]

\(A_{2^{n}-1}^{i-1}\) 可以直接预处理下降幂得到。因此时间复杂度为 \(O(n+m)\)

posted @ 2024-04-09 18:59  小超手123  阅读(4)  评论(0编辑  收藏  举报