NIM博弈详解

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

结论
当且仅当a[1]xora[2]xor...xora[n]=0a[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] xorxor xx 小于a[i]a[i],我们从这一堆中挑选出来一部分拿走,就一定可以把异或和重新置为0。

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

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

posted @ 2020-02-12 00:17  correct  阅读(334)  评论(0)    收藏  举报