3664: 异或(第三轮02)
题目描述
鸡尾酒获得了一个数组,他定义数组的价值为每个相邻元素异或之和。例如数组 [3,5,9] 的价值为 (3^5) + (5^9) = 18 ,其中 ^ 为二进制中的异或运算。
现在他将数组向右进行 m 次向右循环移动,每次移动 bi 位,循环移动都建立在 上一次移动的基础上进行。现在他想考考你, 每次循环移动过后,这个数组的价 值为多少?
向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元 素,其余元素全部向右移动一位。
例如数组 [1,2,3,4,5] 向右循环移动两位的结果是 [4,5,1,2,3]。
输入
输入第一行包含两个正整数 n和m,分别代表数组的长度和循环移动的次数。
接下来一行包含n个由空格隔开的正整数,分别表示数组中每个数字的长度。
接下来一行包含m个正整数,分别表示每次循环移动要移动的位数 bi 。
输出
先输出一个答案表示原来数组的价值,然后输出m个整数,表示对于每一次循环 移位后,数组当前的价值。所有输出的整数用空格隔开。
样例输入 复制
5 3
1 2 3 4 5
1 1 2
样例输出 复制
12 15 9 13
提示
【样例 1 输入】
5 3
1 2 3 4 5
1 1 2
【样例 1 输出】
12 15 9 13
【样例 1 说明】
初始时数组价值为 (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
【样例 2输出】
32 37 32 32 41 29
【数据范围】
对于 20% 的数据,满足 n ≤ 105, m = 0。
对于另外 40% 的数据,满足 bi ≤ n ≤ 10^3, m ≤ 5。 对于 100% 的数据,满足 1 ≤ n, m, ai, bi ≤ 10^5 。