问题 4517 --异或

4517: 异或★★

时间限制: 5 Sec  内存限制: 256 MB
提交: 13  解决: 6
[提交][状态][命题人:]

题目描述

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

 现在他将数组向右进行  向右循环移动,每次移动 位,循环移动都建立在上一次移动的基础上进行。现在他想考考你,每次循环移动过后,这个数组的价值为多少?  向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元素,其余元素全部向右移动一位。  例如数组 [1,2,3,4,5] 向右循环移动两位的结果是 [4,5,1,2,3]

输入

输入第一行包含两个正整数 n和,分别代表数组的长度和循环移动的次数。 接下来一行包含个由空格隔开的正整数,分别表示数组中每个数字的长度。 接下来一行包含个正整数,分别表示每次循环移动要移动的位数 bi

输出

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

样例输入
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。

样例2输入:


5 5

10 13 2 5 6

4

1

5

1

样例2输出:



32 37 32 32 41 29


来源

 

[提交][状态]