NIM博弈详解

问题
有n堆石子,第i堆有 a [ i ] a[i] 个,每次可以取走任意一堆的任意多个,可以取完但不能不取。取走最后一个的胜利。

结论
当且仅当 a [ 1 ] x o r a [ 2 ] x o r . . . x o r a [ n ] = 0 a[1] xor a[2] xor ... xor a[n]=0 ,先手必败

首先考虑必败情况,即对方拿走了最后一个,此时a全部为0,显然有异或和为0,败了。

然后是,对于异或和不为0的情况,设异或和为x,最高位的1在第k位,那么一定有一个数 a [ i ] a[i] 最高位1也在k位,显然 a [ i ] a[i] x o r xor x x 小于 a [ i ] a[i] ,我们从这一堆中挑选出来一部分拿走,就一定可以把异或和重新置为0。

而当为0的时候,例如此时轮到甲操作,此时是甲的必败状态,因为取走一部分后必败状态被打破,对方取走后又可以恢复甲的必败状态,因此甲必败。

也就是说如果一开始异或和为0,先手就已经到发了必败点,如果不为0,也先手取走一部分后,异或和为0,轮到后手,相当于后手到达了必败点,先手必胜。

发布了204 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43701790/article/details/104272301