异或

异或

题目描述

鸡尾酒获得了一个数组,他定义数组的价值为每个相邻元素异或之和。例如数组 [3,5,9]\lbrack3,5,9\rbrack 的价值为 (35)+(59)=18(3\oplus5)+(5\oplus9)=18 ,其中 \oplus 为二进制中的异或运算。

现在他将数组向右进行 mm 次向右循环移动,每次移动 bib_i位,循环移动都建立在上一次移动的基础上进行。现在他想考考你,每次循环移动过后,这个数组的价值为多少?

向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元素,其余元素全部向右移动一位。

例如数组 [1,2,3,4,5]\lbrack1,2,3,4,5\rbrack 向右循环移动两位的结果是 [4,5,1,2,3]\lbrack4,5,1,2,3\rbrack

输入格式

输入第一行包含两个正整数 nnmm,分别代表数组的长度和循环移动的次数。

接下来一行包含 nn 个由空格隔开的正整数,表示数组中各个数字 aia_i

接下来一行包含 mm 个正整数,分别表示每次循环移动要移动的位数 bib_i

输出格式

先输出一个答案表示原来数组的价值,然后输出 mm 个整数,表示对于每一次循环移位后,数组当前的价值。输出的整数之间用空格隔开。

样例 #1

样例输入 #1

5 3
1 2 3 4 5
1 1 2

样例输出 #1

12 15 9 13

样例 #2

样例输入 #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\% 的数据,满足 1n,m,ai,bi1051 \le n, m, a_i, b_i \le 10^5


【样例 1 说明】

初始时数组价值为 (12)+(23)+(34)+(45)=12(1\oplus2) + (2\oplus3) + (3\oplus4) + (4\oplus5) = 12

第一次移位之后,数组变为 [5,1,2,3,4]\lbrack5,1,2,3,4\rbrack ,其价值为 (51)+(12)+(23)+(34)=15(5\oplus1) + (1\oplus2) + (2\oplus3) + (3\oplus4)= 15

第二次移位之后,数组再次向右循环移动一次,数组变为 [4,5,1,2,3]\lbrack4,5,1,2,3\rbrack,价值为 99

第三次移位之后,数组向右移动两次,变为 [2,3,4,5,1]\lbrack2,3,4,5,1\rbrack,价值为 1313

信息

ID
1009
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者

相关

在下列训练计划中:

“你今天AC了吗”团队原创