NIM游戏 和 anti-NIM游戏:
NIM游戏,是取走最后一个石子者胜
而anti-NIM游戏,是取走最后一个石子者败
游戏通用准则:
1. 若一个局面为必胜态,则总存在一种操作方式将当前状态转化为必败态
2. 若一个局面为必败态,则所有操作都只能转化为必胜态
NIM游戏的解法:
将当前局面的所有堆的石子数进行异或(也称为:NIM sum),
1)若NIM sum=0,则当前局面为必败态
2)若NIM sum≠0,则当前局面为必胜态
#include <cstdio> #include <iostream> using namespace std; int main () { int T, n, x, game; bool allOne; scanf("%d", &T); while(T--) { scanf("%d", &n); game = 0; allOne = true; for(int i=0; i<n; i++) { scanf("%d", &x); if(x!=1) allOne = false; game ^= x; } if(allOne && !game || !allOne && game) { printf("%s\n", "John"); } else { printf("%s\n", "Brother"); } } return 0; }
时间: 2024-10-04 18:02:07