异或
题目描述
鸡尾酒获得了一个数组,他定义数组的价值为每个相邻元素异或之和。例如数组 \(\lbrack3,5,9\rbrack\) 的价值为 \((3\oplus5)+(5\oplus9)=18\) ,其中 \(\oplus\) 为二进制中的异或运算。
现在他将数组向右进行 \(m\) 次向右循环移动,每次移动 \(b_i\)位,循环移动都建立在上一次移动的基础上进行。现在他想考考你,每次循环移动过后,这个数组的价值为多少?
向右循环移动的定义:向右循环移动一位,数组中最右边的元素变成最左边的元素,其余元素全部向右移动一位。
例如数组 \(\lbrack1,2,3,4,5\rbrack\) 向右循环移动两位的结果是 \(\lbrack4,5,1,2,3\rbrack\)。
输入格式
输入第一行包含两个正整数 \(n\) 和 \(m\),分别代表数组的长度和循环移动的次数。
接下来一行包含 \(n\) 个由空格隔开的正整数,表示数组中各个数字 \(a_i\)。
接下来一行包含 \(m\) 个正整数,分别表示每次循环移动要移动的位数 \(b_i\)。
输出格式
先输出一个答案表示原来数组的价值,然后输出 \(m\) 个整数,表示对于每一次循环移位后,数组当前的价值。输出的整数之间用空格隔开。
样例 #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\%\) 的数据,满足 \(n \le 10^5, m = 0\)。
对于另外 \(40\%\) 的数据,满足 \(b_i \le n \le 10^3, m \le 5\)。
对于 \(100\%\) 的数据,满足 \(1 \le n, m, a_i, b_i \le 10^5\)。
【样例 1 说明】
初始时数组价值为 \((1\oplus2) + (2\oplus3) + (3\oplus4) + (4\oplus5) = 12\)。
第一次移位之后,数组变为 \(\lbrack5,1,2,3,4\rbrack\) ,其价值为 \((5\oplus1) + (1\oplus2) + (2\oplus3) + (3\oplus4)= 15\)。
第二次移位之后,数组再次向右循环移动一次,数组变为 \(\lbrack4,5,1,2,3\rbrack\),价值为 \(9\)。
第三次移位之后,数组向右移动两次,变为 \(\lbrack2,3,4,5,1\rbrack\),价值为 \(13\)。
信息
- ID
- 1009
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者
相关
在下列训练计划中: