100 atcoder#ABC126F. [ABC126F] XOR Matching

[ABC126F] XOR Matching

题目描述

以下の条件を満たす、長さ 2M + 1 2^{M\ +\ 1} の数列 a a = {a1, a2, ..., a2M + 1 a_1,\ a_2,\ ...,\ a_{2^{M\ +\ 1}} } を、存在するならば 1 1 つ構築してください。

  • a a 0 0 以上 2M 2^M 未満の整数を、それぞれちょうど 2 2 つずつ含む。
  • ai = aj a_i\ =\ a_j を満たす任意の i, j (i < j) i,\ j\ (i\ <\ j) について、ai xor ai + 1 xor ... xor aj = K a_i\ xor\ a_{i\ +\ 1}\ xor\ ...\ xor\ a_j\ =\ K である。

xor (排他的論理和) とは

整数 c1, c2, ..., cn c_1,\ c_2,\ ...,\ c_n の xor は以下のように定義されます。

  • c1 xor c2 xor ... xor cn c_1\ xor\ c_2\ xor\ ...\ xor\ c_n を二進表記した際の 2k 2^k (k  0 k\ \geq\ 0 ) の位の数は、c1, c2, ..., cn c_1,\ c_2,\ ...,\ c_n のうち二進表記した際の 2k 2^k の位の数が 1 1 となるものが奇数個ならば 1 1 、偶数個ならば 0 0 である。

例えば、3 xor 5 = 6 3\ xor\ 5\ =\ 6 です (二進表記すると: 011 xor xor 101 = = 110 です)。

输入格式

入力は以下の形式で標準入力から与えられる。

M M K K

输出格式

条件を満たす数列 a a が存在しなければ -1 を出力せよ。

存在するならば、a a の要素を空白区切りで出力せよ。

条件を満たす数列が複数存在する場合、どれを出力してもよい。

题目大意

请构造一个长度为 2m+12^{m+1} 的序列 aa 满足

  • i[1,2m+1],ai[0,2m1]\forall i \in[1, 2^{m+1}], a_i \in [0, 2^m-1] 且每个数都恰好出现两次。
  • 对于任意一对 (i,j)(i, j) 满足 ai=aja_i = a_j,$a_i\oplus a_{i+1} \oplus \cdots \oplus a_{j-1} \oplus a_j = k$

\oplus 表示按位异或。

若不存在满足要求的序列,输出-1
若存在多个满足要求的序列,输出任意一个即可。

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

提示

制約

  • 入力は全て整数である。
  • 0  M  17 0\ \leq\ M\ \leq\ 17
  • 0  K  109 0\ \leq\ K\ \leq\ 10^9

Sample Explanation 1

このケースでは、条件を満たす数列は複数存在します。 例えば a a = {0, 0, 1, 1 0,\ 0,\ 1,\ 1 } の場合、ai = aj a_i\ =\ a_j を満たす (i, j) (i < j) (i,\ j)\ (i\ <\ j) として (1, 2) (1,\ 2) (3, 4) (3,\ 4) があります。a1 xor a2 = 0, a3 xor a4 = 0 a_1\ xor\ a_2\ =\ 0,\ a_3\ xor\ a_4\ =\ 0 であるため、この a a は与えられた条件を満たしています。

Sample Explanation 2

条件を満たす数列は存在しません。

Sample Explanation 3

条件を満たす数列は存在しません。