#C1024. 环形传送带的校验值 (conveyorchecksum)

环形传送带的校验值 (conveyorchecksum)

题目描述

实验室里有一条首尾相接的传送带,上面依次放着 nn 个数据盒。工程师把当前从左到右看到的序列记为 a1,a2,,ana_1,a_2,\ldots,a_n,并定义它的校验值为相邻两个数据盒编号异或后的总和:

$$(a_1 \mathbin{\mathrm{xor}} a_2)+(a_2 \mathbin{\mathrm{xor}} a_3)+\cdots+(a_{n-1} \mathbin{\mathrm{xor}} a_n)$$

传送带每向右转动一次,最右端的数据盒会移动到最左端。例如 [4, 5, 1, 2] 右转一次后变为 [2, 4, 5, 1]

现在会依次进行 mm 轮操作。第 ii 轮会让传送带连续右转 bib_i 次,且每一轮都建立在上一轮结束后的状态上。请输出初始状态以及每轮结束后的校验值。

输入格式

在文件 conveyorchecksum.in 中读入。

第一行输入两个正整数 n,mn,m,表示序列长度和操作轮数。

第二行输入 nn 个正整数 a1,a2,,ana_1,a_2,\ldots,a_n

接下来输入 mm 个正整数 b1,b2,,bmb_1,b_2,\ldots,b_m。这些数可以分布在一行或多行中。

输出格式

在文件 conveyorchecksum.out 中输出。

输出 m+1m+1 个整数,用空格隔开。

第一个整数表示初始序列的校验值,之后第 ii 个整数表示第 ii 轮操作结束后的校验值。

样例

样例输入 #1

5 3
1 2 3 4 5
1 1 2

样例输出 #1

12 15 9 13

样例输入 #2

5 5
10 13 2 5 6
4
1
5
1
2

样例输出 #2

32 37 32 32 41 29

数据范围

  • 对于 20%20\% 的数据,满足 n105,m=0n \le 10^5,m=0
  • 对于另外 40%40\% 的数据,满足 bin103,m5b_i \le n \le 10^3,m \le 5
  • 对于 100%100\% 的数据,满足 2n1052 \le n \le 10^50m,ai,bi1050 \le m,a_i,b_i \le 10^5