atcoder#ARC145E. [ARC145E] Adjacent XOR

[ARC145E] Adjacent XOR

题目描述

長さ N N の非負整数列 $ A=(A_1,A_2,\ldots,A_{N}),B=(B_1,B_2,\ldots,B_{N}) $ が与えられます。

数列 A A に対し以下の操作を 70000 70000 回以下行うことで A A B B に一致させられるか判定し、可能な場合は実際に操作手順を一つ示してください。

  • 整数 K (1 K  N) K\ (1\le\ K\ \le\ N) を選ぶ。全ての i (2 i  K) i\ (2\leq\ i\ \leq\ K) について、Ai A_i の値を Ai1  Ai A_{i-1}\ \oplus\ A_i で置き換える。この置き換えは全ての i (2 i  K) i\ (2\leq\ i\ \leq\ K) に対して同時に行う。

ただしここで、 \oplus はビット単位 XOR \mathrm{XOR} 演算を表します。

ビット単位 XOR \mathrm{XOR} 演算とは非負整数 A,B A,B のビット単位 XOR \mathrm{XOR} 演算、A B A\oplus\ B は、以下のように定義されます。

  • A B A\oplus\ B を二進表記した際の 2k (k 0) 2^k\ (k\geq\ 0) の位の数は、A,B A,B を二進表記した際の 2k 2^k の位の数のうち一方のみが 1 1 であれば 1 1 、そうでなければ 0 0 である。

例えば、3 5 = 6 3\oplus\ 5\ =\ 6 となります(二進表記すると: 011 101 = 110 011\oplus\ 101\ =\ 110 )。

输入格式

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

N N A1 A_1 A2 A_2 \ldots AN A_N B1 B_1 B2 B_2 \ldots BN B_N

输出格式

70000 70000 回以下の操作で A A B B に一致させられない場合、No と出力せよ。一致させられる場合、操作回数を M M 回とし、i i 回目の操作で選んだ整数を Ki K_i として以下の形式で出力せよ。

Yes M M K1 K_1 K2 K_2 \ldots KM K_M

条件を満たす解が複数存在する場合、どれを出力しても正解とみなされる。

题目大意

给定长度为 nn 的非负整数列 a=(a1,a2,,an),b=(b1,b2,,bn)a=(a_1,a_2,\cdots, a_n),b=(b_1,b_2,\cdots, b_n)

判断能否对数列 aa 进行以下操作最多 7000070000 次,使得数列 aabb 一致,如果能,给出一个可行的操作步骤。

  • 操作:选择整数 k(1kn)k(1\le k\le n)。对于所有 i(2ik)i(2\le i\le k),使 aiai1aia_i\gets a_{i-1}\oplus a_i

其中,\oplus 表示按位 XOR\mathrm{XOR}(异或)运算。

3
1 2 0
1 2 3
Yes
2
2 3
2
10 100
1 0
No
2
1152921504606846975 0
1152921504606846975 0
Yes
0

提示

制約

  • 2  N  1000 2\ \leq\ N\ \leq\ 1000
  • 0  Ai, Bi < 260 0\ \leq\ A_i,\ B_i\ <\ 2^{60}
  • 入力は全て整数

Sample Explanation 1

この出力例では、操作によって数列 A A は以下のように変化します。 - 初期状態:A=(1, 2, 0) A=(1,\ 2,\ 0) - 1 1 回目の操作後:A=(1, 3, 0) A=(1,\ 3,\ 0) - 2 2 回目の操作後:A=(1, 2, 3) A=(1,\ 2,\ 3) 2 2 回の操作後、A A B B は一致しているのでこの出力は条件を満たします。