经典NIM游戏(洛谷)
一、满足NIM游戏的条件
1、有两名选手
2、交替移动
3、另名选手面对的可选移动是有限集
4、可选移动有限集与选手无关,与之前的任何操作都无关
5、当一名选手无法移动,及可选移动集为空时,该选手为必败态
二、状态
1、必胜态:当前该移动的选手必胜的状态
2、必输态:当前该移动的选手必输的状态
3、结束态:当前该移动的选手可移动集为空的状态,也为该选手的必输态
三、状态特性
1、每一个必胜态能够转移的状态里面必定有一个必输态
2、每一个必输态能够转移的状态里面一定都是必胜态
3、每一个结束态都是必输态
四、结论与证明
结论:所有石子个数的异或和为NIMSUM,当NIMSUM=0时,先手必输;反之先手必赢。
证明:
1、石子状态为(0,0,0……,0,0)时,NIMSUM=0,此时相当于先手面临的局面为没有石子可以拿了,所以先手必输。
2、石子状态为(0,0,0……a,a)时,NIMSUM=0,此时相当于先手面临两堆数量相等的石子,那么先手在其中一堆中拿几个,后手就可以在另一堆中拿几个,保持两堆石子数量相等的状态,此时先手必输。
3、石子状态为(0,0,0……a,b)时,NIMSUM!=0,此时相当于先手面临两堆数量不相等的石子,那么先手先在数量多的一堆中拿几个,使剩下的两堆数量相等,此时后手就面临着两堆数量相等的石子,后手必败,那么先手必赢。
其实最终的三个状态就是这样的,我们要做的就是根据初始状态来发现他的终态是这三个状态中的哪一个。我们发现如果我们可以把终态推到前两种,那么先手必输(其实就是当前的后手),此时的规律是NIMSUM=0。那我们要做的就是看从始态能推出的终态是NIMSUM=0还是NIMSUM!=0。
1、能从NIMSUM=0—>NIMSUM=0吗?不可能。因为当a1^a2^a3……^an=0时,如果a1’^a2^a3……^an=0,我们有a1^a2^a3……^an=a1‘^a2^a3……^an=0,根据异或的消去率,a1=a1’,所以不可能从NIMSUM=0的状态到NIMSUM=0的状态,即不可能从先手必输态到先手必输态,这就印证了状态特性中的第二条:每一个必输态能够转移的状态里面一定都是必胜态。也证明了如果始态NIMSUM=0,那么能推到的终态NIMSUM!=0,所以终态的先手必赢,那么始态的先手就必输。
2、能从NIMSUM!=0—>NIMSUM=0吗?能。因为如果a1’^a2^a3……^an=k,那么一定存在一个ai使k的最高位为1,那么a1’^a2^a3…^(ai^k)…^an=k^k=0,(ai^k)<ai,即我们可以在第ai堆中拿走ai-(ai^k)个石子使状态变为NIMSUM=0。也就是我们可以将终态推到终态的先手必输,也就是始态的先手必赢的状态。
五、总结
所有石子个数的异或和为NIMSUM,当NIMSUM=0时,先手必输;NIMSUM!=0,先手必赢。