上链接
原cf网页链接Educational Codeforces Round 157 (Rated for Div. 2)D题
题目
输入输出范例
输入
4
2 1 2
输出
0 2 3 1
输入
6
1 6 1 4 1
输出
2 3 5 4 0 1
题目解析
这道题我注意到首先由于异或运算的可交换性
异或运算
⊕
可交换性:指
a
⊕
b
=
c
,
那么
a
⊕
c
=
b
,
同时
b
⊕
c
=
a
由此可知,如果知道了
b
i
与
b
i
+
1
是可以通过
b
i
⊕
b
i
+
1
=
a
i
,
由递推可得,只要知道了一个
b
1
,
那么可以通过
b
1
⊕
a
1
得到
b
2
,
同理可得,用相同的方法能得到所有的
b
数组元素。
异或运算\oplus可交换性:指a\oplus b=c,那么a\oplus c=b,同时b\oplus c=a\\ 由此可知,如果知道了b_i与b_i+1是可以通过b_i\oplus b_i+1=a_i,\\由递推可得,只要知道了一个b_1,那么可以通过b_1\oplus a_1得到b_2,\\同理可得,用相同的方法能得到所有的b数组元素。
异或运算⊕可交换性:指a⊕b=c,那么a⊕c=b,同时b⊕c=a由此可知,如果知道了bi与bi+1是可以通过bi⊕bi+1=ai,由递推可得,只要知道了一个b1,那么可以通过b1⊕a1得到b2,同理可得,用相同的方法能得到所有的b数组元素。
因此问题就转化成了一个找到正确的b1问题。
下面用到了二进制位思维
由于这道题确定了
b
数组是由
0
到
n
−
1
的所有数字组成,因此对于
二进制上每一个确定的位,都可以知道
b
数组一共
n
数在这一个位
上有多少个数是
1
多少个是
0
,因此可以通过先设置
b
1
为
0
,然后将
由于这道题确定了b数组是由0到n-1的所有数字组成,因此对于\\二进制上每一个确定的位,都可以知道b数组一共n数在这一个位\\上有多少个数是1多少个是0,因此可以通过先设置b1为0,然后将
由于这道题确定了b数组是由0到n−1的所有数字组成,因此对于二进制上每一个确定的位,都可以知道b数组一共n数在这一个位上有多少个数是1多少个是0,因此可以通过先设置b1为0,然后将
代码解析
有些地方还没有想明白,暂时先不写这部分,明天再更,累死我了