题意:
- 一个水平网格上有N个棋子
- Georgia和Bob每到自己回合时可以向左移动网格上任意一个棋子任意步数
- 棋子与棋子之间不能重叠和相互跨越
- 当到对手回合时,其无法再移动任何棋子则我方赢
- 假设Georgia和Bob都采用最优策略,谁会赢得比赛?
输入要求:
- 第一行依次输入网格上所有棋子所在的位置,如:1 3 6 7
- 第二行输入先手者的名字,如:Georgia
输出要求:
- 如果Georgia赢的比赛,输出:“Georgia will win”
- 如果Bob赢的比赛,输出:“Bob will win”
思路:
- 把该问题类比Nim游戏
- 每两个棋子:看作一个石堆,如上图中1和3看作一个石堆,6和7看作一个石堆,如果棋子个数为奇数个,那么首个棋子与网格的边界作为一个石堆
- 棋子之间的空格数量:看作石堆中的石子数量
- 任意一个棋子向左移动任意步数:看作从任意一个石堆中取出任意数量石子
- 只需要判断所有的初始石堆(所有的每两个一组的棋子),相应石子数量(每组棋子中间的空格数量)的异或结果是否为0即可
解释一下为什么上图中3和6之间的空格不做考虑:因为如果双方均采用最优策略,那么即便移动6,下一个回合对手肯定要移动7来跟进6,保证了6和7之间的空格不会改变,最终结果就是3和6会靠在一起,两个为一组的棋子之间的空格没有改变。