CF1630A And Matching

题目大意:

给定 \(n,k\),将 \(0 \sim n - 1\) 分为 \(\frac{n}{2}\) 组,每组两个,要求每组之间的与之和为 \(k\)
其中 \(n\)\(2\) 的幂,\(n \le 2^{16}\)

解题思路:

我被 *1500 击杀了?

考虑答案可以钦定只有若干组对答案造成贡献。
我们可以通过构造来确定是那些组对答案有贡献并让其他组没有。

由于 \(n\)\(2\) 的幂,所以 \(i & (n - i - 1) = 0\) 是恒成立的。
然后 \(k & (n - 1) = k\) 也是一定的。

所以我们考虑 \(k < n - 1\) 的情况。
首先将 \(k\)\(n - 1\) 配对,那么发现 \(0\)\(n - k - 1\) 没有了匹配的东西。
\(0\) 匹配谁都行,所以将他俩配对。

我们再考虑 \(k = n - 1\) 的情况。
我们考虑将 \(n - 2\)\(n - 1\) 配对,然后再将 \(1\)\(3\) 匹配。
那么 \(0, n - 4\) 没有配对的,所以将他们配在一起。

没想到的点:

我在考虑 “没有配对的数” 时想的是将他分为前后两部分,然后这显然是不可行的。
而且这个题也说明了构造就是造出来大部分情况,然后剩下 eps 种情况单独考虑。

posted @ 2025-06-19 13:34  positive_deviation  阅读(10)  评论(0)    收藏  举报