#2706. Sam的序列变换

Sam的序列变换

题目描述

Sam 有一个序列 aa 包含 nn 个整数,分别为 aia_i

现在 Sam 每次可以进行一次操作,操作分 22 步:

  1. 计算 sum=a1a2...ansum = a_1 \oplus a_2 \oplus ... \oplus a_n
  2. Sam 选择一个下标 xx 进行赋值 a[x]=suma[x] = sum

现在 Sam 想知道,要将 aa 序列变成 bb 序列最少需要花费多少次操作?

P.S. 其中 \oplus 是异或(xorxor)操作,在 C++ 中可以用 a^b 来表示。

输入格式

输入第一行包含一个整数 nn 表示序列长度。

输入第二行包含 nn 个整数,表示原序列中的数字 aia_i

输入第三行包含 nn 个整数,表示目标序列的数字 bib_i

输出格式

输出一个整数表示最少的操作次数。

输入输出样例 #1

输入 #1

3
0 1 2
2 0 1

输出 #1

4

输入输出样例 #2

输入 #2

4
0 1 2 3
2 0 1 3

输出 #2

3

说明/提示

数据范围

对于 30%30\% 的数据满足: 1n101 \leq n \leq 10

对于另外 30%30\% 的数据满足:ai=ia_i=inn 在二进制下每一位均为 11

对于 100%100\% 的数据满足:1n100000,0ai,bi2301 \leq n \leq 100000, 0 \leq a_i,b_i \leq 2^{30}

且题目保证一定有解。

样例解释1

每一次操作选择的 xx 依次是:1,2,3,11,2,3,1