nim 博弈:通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
这游戏看上去有点复杂,先从简单情况开始研究吧。
如果只有一堆,先走的人直接就赢了
如果剩两堆数量一样的,比如5 5,不管怎么走都是输
所以的出来的结论当达到一个平衡的点的时候,是必败点
那三堆呢?就需要异或来算是不是平衡点
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int n, a;
while(cin >> n && n){
int k = 0;
for(int i = 1; i <= n; i ++){
cin >> a;
k ^= a;
}
if(k != 0)cout << "Rabbit Win!";
else cout << "Grass Win!";
cout << endl;
}
return 0;
}