#2804. XOR Matching

0

XOR Matching

XOR Matching

题目描述

构造一个长度为 2M+12^{M + 1} 的序列 aa = {a1, a2, ..., a2M+1a_1,\ a_2,\ ...,\ a_{2^{M + 1}}},使其满足以下条件(如果存在这样的序列)。

每个在 00 到 2M−12^M - 1(含)之间的整数在 aa 中恰好出现两次。 对于任意满足 i < j 且 ai=aja_i = a_j 的 i,ji,j,有公式 ai xor ai+1 xor ... xor aj=Ka_i \ xor \ a_{i + 1} \ xor \ ... \ xor \ a_j = K 成立。

什么是 xor(按位异或)?
整数 $c_1, c_2, ..., c_n$ 的 xor 定义如下:

当 c1 xor c2 xor ... xor cnc_1 \ xor \ c_2 \ xor \ ... \ xor \ c_n 用二进制表示时,2k2^k 位上的数字(k≥0k \geq 0)是 11 当且仅当在 c1,c2,...cmc_1, c_2, ...c_m 中其二进制表示在 2k2^k 位上为 11 的整数个数为奇数,否则为 00。

例如,3 xor 5=63 \ xor \ 5 = 6。(若用二进制表示:011011 xorxor 101101 == 110110.)

输入格式

从标准输入读入,格式如下: MM KK

输出格式

如果不存在满足条件的序列 aa,输出 −1-1。 如果存在这样的序列 aa,输出任意满足条件的序列 aa 的元素,元素间用空格分隔。 如果存在多个满足条件的序列,输出其中任意一个即可。

1 0
0 0 1 1
1 1
-1
5 58
-1

提示

输入中的所有数值均为整数。 0≤M≤170 \leq M \leq 17 0≤K≤1090 \leq K \leq 10^9对于这一用例,存在多个满足条件的序列。 例如,当 aa = {0,0,1,10, 0, 1, 1} 时,存在两个满足 ai=aja_i = a_j 的对 (i,\ j)\ (i < j):(1,2)(1, 2) 和 (3,4)(3, 4)。由于 a1 xor a2=0a_1 \ xor \ a_2 = 0 且 a3 xor a4=0a_3 \ xor \ a_4 = 0,该序列 aa 满足条件。
不存在满足条件的序列。
不存在满足条件的序列。

标签: AtCoder|abc126F

来源

AtCoder|abc126F