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 种情况单独考虑。

浙公网安备 33010602011771号