我不知道如何解决这个问题>>
给定一个整数数组,我们需要将该数组分成两部分,例如
1)第1组的xor等于第二组的xor
2)两个部分之和的差异最大。
例如:
如果给定的数组是[4,2,6]
然后它可以分为[2],[4,6],
where xor(2) = 010
xor(4,6) = 100^110 = 010 = xor(2)
两部分之和的差异=(4 + 6)-2 = 8(满足上述约束条件的最大差异)。
(如果它不是第二个约束,将数组分成具有相等和的部分就足够了。)
答案 0 :(得分:7)
这是一个棘手的问题。
如果你有整数a1 ... an并且你可以将它们分成两部分,使得它们的XOR相等,这只意味着a1 xor a2 xor ... xor等于零。当它成立时,任何分区都可以工作,例如(a1)xor(a2 xor a3 xor ... xor an)== 0如上所述,所以必须是a1 == a2 xor ... xor an。因此任何分区都有效。鉴于此,您只需选择一个空分区和完整分区(如果允许),或将最小整数分配到单个分区中,并将其他所有内容放入第二个分区。