1. 证明XOR满足交换律,结合律,是自身的逆运算。
比如说,1^0 = 1 1^1 = 0 0^1 = 1 0^0 = 0
1^1^0 = 0 = 1^0^1 = 0.
a^b^a=b 即一个数异或两次相当于无效
2. 从N个数中选出两个数,使XOR和最大。
解法:
我们知道两个数字之间的异或运算都是按位异或,也就是说把他们各自化成为二进制的形式,然后,每次查找与这个数字差别最大的数。
比如现在有,0111,0000,0101,1010. 我们查找最大的异或结果。
可以建立一个trie树。
二进制的比较,要从高位到低位,要使异或和最大,那么我们就枚举第i个数字,查找与第i个数字相差最大的数字是多少,高位优先。
比如说,查找与0 1 1 1 相互异或后得到的最大值的数字是多少,我们的思路肯定是从root开始,依次从高位开始寻找与0 1 1 1 相异或的数字,如果遇到相同的位置,那么就妥协处理。
3. lN个点的边带权的树,找一条路径使XOR和最大。
解法:
任选一个根,h_i表示的是从根节点到节点i的路径的XOR和
X到Y的路径XOR和表示为h_x XOR h_y
4. 从N个数中选出若干个,使XOR和为K,给出方案或指出不可行。
解法:
X_i 为0,表示的是第i个数不选,X_i为1,表示的是第i个数选。
现在考虑K的第p位的情况:
如果K的第p位是1,则第p个二进制位为1的数字有奇数个被选择
如果K的第p位是0,则第p个二进制位为1的数字有偶数个被选择
得到方程X_i1+X_i2+X_i3+...+X_is = Kp ( + 都是XOR )
联立60个方程,方程的解,等价于原问题的解。