CF1630A And Matching
题目描述
给定一个包含 $n$ 个元素的集合($n$ 总是 $2$ 的幂),该集合恰好包含所有整数 $0, 1, 2, \ldots, n-1$。
请将这些元素分成 $\frac{n}{2}$ 对,使得:
- 集合中的每个元素恰好属于一对。
- 所有对中元素按位与的和恰好等于 $k$。形式化地说,若第 $i$ 对为 $a_i$ 和 $b_i$,则需满足:$$\sum_{i=1}^{n/2}{a_i \& b_i} = k$$,其中 $\,\&\,$ 表示按位与运算。
如果有多种方案,输出任意一种。如果无解,则输出 $-1$。
输入格式
输入包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 400$),表示测试数据组数。接下来每组测试数据一行,包含两个整数 $n$ 和 $k$($4 \leq n \leq 2^{16}$,$n$ 是 $2$ 的幂,$0 \leq k \leq n-1$)。
所有测试数据中 $n$ 的总和不超过 $2^{16}$。每组测试数据均不相同。
输出格式
对于每组测试数据,如果无解,输出一行 $-1$。
否则,输出 $\frac{n}{2}$ 行,每行两个整数 $a_i$ 和 $b_i$,表示一对元素。
如果有多种方案,输出任意一种。对的顺序和对内元素顺序均不限。
说明/提示
在第一个测试样例中,$(0\&3)+(1\&2)=0$。
在第二个测试样例中,$(0\&2)+(1\&3)=1$。
在第三个测试样例中,$(0\&1)+(2\&3)=2$。
在第四个测试样例中,无解。
由 ChatGPT 4.1 翻译