问题 5252 --异或

5252: 异或★★

时间限制: 1 Sec  内存限制: 256 MB
提交: 16  解决: 4
[提交][状态][命题人:]

题目描述

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

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

向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元素,其余元素全部向右移动一位。 例如数组 [1,2,3,4,5],向右循环移动两位的结果是 [4,5,1,2,3]。

输入

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

 接下来一行包含 n 个由空格隔开的正整数,分别表示数组中每个数字的长度。 

接下来一行包含 m 个正整数,分别表示每次循环移动要移动的位数  b[i]。

输出

先输出一个答案表示原来数组的价值,然后输出m个整数,表示对于每一次循环 移位后,数组当前的价值。所有输出的整数用空格隔开。
样例输入
Copy
5 3
1 2 3 4 5
1 1 2
样例输出
Copy
12 15 9 13

提示

样例说明:

初始时数组价值为 (1^2) + (2^3) + (3^4) + (4^5) = 12。

第一次移位之后,数组变为 [5,1,2,3,4] ,其价值为 (5^1) + (1^2) + (2^3) + (3^4) = 15。

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

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

对于 20% 的数据,满足 n ≤ 1e5, m = 0。 

对于另外 40% 的数据,满足 b[i] ≤ n ≤ 1e3, m ≤ 5。 

对于 100% 的数据,满足 1 ≤ n, m, a[i], b[i] ≤ 1e5。


来源

[提交][状态]