题目描述
一些观察
这是个非常经典的博弈论中的公平组合游戏,即对于A、B双方而言,二者的行动限制是一样的。
博弈论的关键在于必胜态和必败态的转化,那必胜态和必败态之间又有什么关系呢?
必胜态与必输态之间的转化
首先需要明确,先手和后手可以通过一次操作相互转换,且当前行动的人具有主动优先权,可以选择从目前的状态转移到下一个状态,而这下一个状态,即后继状态往往是非常多的。那怎么判断现在的状态是必胜态还是必败态呢?
这个时候,主动优先权就显得格外重要了——如果后继状态中存在一个必输态,那当前行动者必然会选择那个必输态,从而让另一者必输。
由此可见,必胜态就是后继状态中存在最少一个必输态。
那必输态又怎么判断呢?
因为主动优先权存在,所以若该状态存在至少一个非必胜态,则当前行动人一定会选择这个非必胜态来阻止另一者获胜,故而必输态应是后继状态中全是必胜态。
具体题目分析
在本题中,若是从必输态一个个往前推,会发现时间复杂度和空间复杂度都会爆。那有没有什么简单的方法判断当前状态是什么状态呢?
这个时候,我们可以试着分析一下每个数都可以转化成的东西——二进制!
若我们求出所有数的异或和,并观察每个数的二进制位,就会发现一个性质:
- 在所有数的异或和的二进制中,某一位的数值为0则意味着存在偶数个数的二进制在这一位上为1;数值为1则意味着存在奇数个数的二进制在这一位上为1。
举个例子:
3:011
6:110
4:100
可以发现,这三个数的异或和为001,且在这三个数中,第三位有两个数的数值为1&