【算法心得】位运算

https://codeforces.com/contest/1869/problem/A

研究了好久的样例的逻辑,看不大懂,然后发现

Note that you do not have to minimize k. 
If there are multiple solutions, you may output any of them.

说明样例的解法未必具有参考价值


一组数进行异或,以第一条样例为例:
1 2 3 0
01 10 11 00

0^0=0,所以多少个0相互异或都是0
1^1=0,偶数个1相互异或是0
1^0=1,奇数个1是1
每次计算s的值时,其实是先计算每个数位上1的个数,若有奇数个1,则该位上的结果为1,偶数个为0,这是这次推论出的一个结论,不过对于这题来说用不到


这题主要用到的性质是:

  1. x^x=0
  2. 0^x=x

所以对于任意一组个数为偶数的序列,如果它是x x x x x x这样的构造,那它最后异或出来的结果肯定是0

对于元素偶数个的序列,直接将从头到尾变成s,这样算出来的新s就肯定是0,再从头到尾变成0,就完成了

对于奇数个元素的序列
我们将前N-1个数变成s,那前N-1个数的新异或值是0,算上最后一个数,假设为a,整体N个元素的新s值为a
这时将倒数后两个数都置为a,则整个序列的s值为0^a^a=0,从头到尾变成0即可

你可能感兴趣的:(算法,算法)