CF2245C MEXOR

题目描述

给定一个正整数 $n$ 和一个非负整数 $k$。请构造一个长度为 $n$ 的排列 $p$,使得满足以下条件: - 设 $f(i)=\operatorname{mex}([p_0,p_1,\ldots,p_i])$,其中 $0 \le i < n$。要求 $f(0) \oplus f(1) \oplus \ldots \oplus f(n-1)$ 等于 $k$,其中 $\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 注意,长度为 $n$ 的排列是指包含 $n$ 个互不相同且取值为 $0$ 到 $n-1$ 的整数的数组,顺序任意。例如,$[1,2,0,4,3]$ 是一个排列,而 $[0,1,1]$ 不是排列($1$ 在数组中出现了两次),$[0,2,3]$ 也不是排列($n=3$ 但出现了 $3$)。 $\operatorname{mex}$(Minimum EXcluded)定义为:对于整数集合 $c_1, c_2, \ldots, c_k$,其 $\operatorname{mex}$ 是不在集合 $c$ 中的最小非负整数 $x$。

输入格式

每组测试数据包含多组测试用例。第一行为测试用例组数 $t$($1 \le t \le 10^4$)。接下来 $t$ 行,每行包含两个整数 $n$ 和 $k$($1 \le n \le 2 \cdot 10^5$,$0 \le k \le 10^9$)。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,如果不存在满足条件的排列,输出一行 "NO"(不区分大小写)。 否则,首先输出一行 "YES"。接下来一行,输出 $n$ 个互不相同的整数 $p_0,p_1,\ldots,p_{n-1}$($0 \le p_i < n$),表示你构造的排列 $p$。如果有多种满足条件的方案,你可以输出其中任意一种。 回答(比如 "yEs"、"yes"、"Yes"、"YES")都将被识别为正解。

说明/提示

在第一个和第二个测试用例中,唯一的长度为 $1$ 的排列为 $[0]$,其 $f(0)=\operatorname{mex}([0])=1$。 在第四个测试用例中,可以证明不存在长度为 $4$ 的排列使得 $f(0) \oplus f(1) \oplus f(2) \oplus f(3)=8$。 在第五个测试用例中,$f(i)$ 的取值如下所示: - $f(0)=\operatorname{mex}([3])=0$, - $f(1)=\operatorname{mex}([3,0])=1$, - $f(2)=\operatorname{mex}([3,0,2])=1$, - $f(3)=\operatorname{mex}([3,0,2,1])=4$, - $f(4)=\operatorname{mex}([3,0,2,1,4])=5$。 由于 $f(0) \oplus f(1) \oplus f(2) \oplus f(3) \oplus f(4)=0\oplus 1 \oplus 1 \oplus 4 \oplus 5=1$,因此 $p=[3,0,2,1,4]$ 是一个合法排列。 由 ChatGPT 5 翻译