Math 帮助了解谷歌代码阻塞2011糖果分割问题

Math 帮助了解谷歌代码阻塞2011糖果分割问题,math,binary,Math,Binary,我正在参加谷歌代码堵塞。在任何事情发生之前,我想说我不希望任何人解决我的问题“获胜”,或者类似的事情。我只是想得到一些帮助来理解一个我在已经结束的一轮中无法解决的问题 以下是问题的链接,称为。我不会在这里解释它,因为它是nosense,我无法比谷歌更好地解释它 我想知道一些“好”的解决方案,例如,我下载了第一个英文解决方案,我看到代码只有30行!!!太棒了!(任何人都可以下载它,所以我认为说出来没有问题:他们从汤姆那里找到的解决方案)。我连看代码都看不懂解决方案。(我对Java的无知无济于事。)

我正在参加谷歌代码堵塞。在任何事情发生之前,我想说我不希望任何人解决我的问题“获胜”,或者类似的事情。我只是想得到一些帮助来理解一个我在已经结束的一轮中无法解决的问题

以下是问题的链接,称为。我不会在这里解释它,因为它是nosense,我无法比谷歌更好地解释它

我想知道一些“好”的解决方案,例如,我下载了第一个英文解决方案,我看到代码只有30行!!!太棒了!(任何人都可以下载它,所以我认为说出来没有问题:他们从汤姆那里找到的解决方案)。我连看代码都看不懂解决方案。(我对Java的无知无济于事。)


谢谢

谷歌自己提供了关于问题和解决方案的讨论

有关糖果分割问题,请参见此链接:

基本上,糖果可以分成两个相等的价值堆(从帕特里克的角度来看),如果

一个这样的分割是除一个之外的所有糖果值的总和。要使一堆糖果的价值最大化,就把价值最低的糖果放在自己的一堆糖果里

为什么会这样

我认为,根据定义,帕特里克的加法实际上等于xoring值。从问题的定义来看,我们想要

C[i] xor C[j] xor ... xor C[k] == C[x] xor C[y] xor ... xor C[z]
对于每一侧的某些元素

将RHS添加到LHS和RHS产生

C[i] xor C[j] xor ... xor C[k] xor C[x] xor C[y] xor ... xor C[z] == 0
由于将一个值与其自身进行异或运算得到0,并且异或运算的顺序并不重要,因此RHS变为0

LHS中的任何元素都可以移到右侧,并且相等值仍然保持不变。选择最小值元素可以在桩之间进行最佳分割。

我知道(条件A或条件B)等于(条件A或条件B和!(条件A和条件B)),但它是什么意思(myIntA或myIntB)?好的。我从这里读到:,现在,你的句子“如果c[0]xor c[1]…==0,糖果可以分成两个相等的值堆”,为什么是真的?
C[i] xor C[j] xor ... xor C[k] xor C[x] xor C[y] xor ... xor C[z] == 0