用相等的XOR分割数组

时间:2013-08-22 10:45:36

标签: algorithm bit-manipulation bit

我不知道如何解决这个问题>>

给定一个整数数组,我们需要将该数组分成两部分,例如

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(满足上述约束条件的最大差异)。

(如果它不是第二个约束,将数组分成具有相等和的部分就足够了。)

1 个答案:

答案 0 :(得分:7)

这是一个棘手的问题。

如果你有整数a1 ... an并且你可以将它们分成两部分,使得它们的XOR相等,这只意味着a1 xor a2 xor ... xor等于零。当它成立时,任何分区都可以工作,例如(a1)xor(a2 xor a3 xor ... xor an)== 0如上所述,所以必须是a1 == a2 xor ... xor an。因此任何分区都有效。鉴于此,您只需选择一个空分区和完整分区(如果允许),或将最小整数分配到单个分区中,并将其他所有内容放入第二个分区。