您的位置:首页 > 其它

Chalkboard XOR Game

2018-04-04 22:35 225 查看
We are given non-negative integers nums[i] which are written on a chalkboard.  Alice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first.  If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses.  (Also, we'll say the bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.)Also, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.Return True if and only if Alice wins the game, assuming both players play optimally

如果要保证Alice一定赢,则要保证存在一种Alice的决策路径,使得在最终Alice没有需要擦除的数,或者某个Alice的回合时所有数的异或为0。
现在证明一个命题:当剩余偶数个数时,如果这些数的异或不为零,那么一定存在一种擦除方式使得擦除某个数之后剩余的异或也不为零。(也就是说无论谁只要他剩余偶数个数时,他如果不能直接赢,那他也至少有一种保证下一步他不会立即输的擦除方式)
为了证明这个命题,先证明如下命题:当一个序列有2n(n=1,2,3……)个数时,且该序列所有数的异或值都不为0,那其中一定存在2(n-1)个数使得这些数形成的子序列的异或值也不为零:
反证法:设该序列为 x1^x2^....xn = M != 0
如果对任意2(n-1)个数的异或值都为零,则对任意i,j,i!=j,都有xi^xj=M
又因为对任意i,k,j 若xi^xk = M = xk^xj啧xi = xj,所以该序列所有数都相等
则x1^x2^...^xn = x^x^...x = 0,矛盾,因此原结论成立。

回到原命题,使用递推来证明:
当剩余2个数,且异或值不为零时,则有x^y!=0,则最多只有1个为0,如果x,y中有1个为零,则擦除0值,如果x,y都不为零,擦除任意一个都能保证结论成立。
假设当剩余2k个数时结论成立
则对剩余2k+2的情况,根据之前的推导,若该序列的异或值不为零,则一定存在一个2k的子集他的异或值不为零,而对于该2k大小的子集,则一定存在一个数A,使得从这个子集中擦除A之后,剩余的2k-1个数的异或值B也不为零,然后将原序列剩余的两个数记为C和D,则这个2k+2的自己被分为A, B, C, D四个部分
采用反证法,假如此时对所有的擦除方法,都会使得擦除之后剩余的数的异或值为零,则有以下情况
擦除A,B^C^D = 0,擦除C,B^A^D=0,擦除D,A^B^C=0,
将后两式异或得到 0=0^0=(B^A^D)^(A^B^C)=B^A^D^A^B^C=C^D=B!=0
矛盾,假设不成立,而在A,C,D我们一定能找到一个数使得擦除之后的剩余2k+1个数的异或值不为零。

从这个结论,我们可以得到两个结论,如果一开始只有偶数个数,则Alice在每一回合都是有解的,因此无论Bob怎么做,Alice总能至少有一种策略,也就是拖到最后一轮到她的时候一个数都没有,从而获得胜利
另一方面如果一开是有奇数个数,那Bob总是在他的回合有解,那么总是能拖到最后让Alice输。
因此要让Alice赢则必须一开始就所有数的异或值为零,或者只有偶数个数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: