nim游戏定义:

anti-nim游戏定义:

NIM游戏 和 anti-NIM游戏的区别:
NIM游戏,是取走最后一个石子者胜
而anti-NIM游戏,是取走最后一个石子者败
游戏通用准则:
1. 若一个局面为必胜态,则总存在一种操作方式将当前状态转化为必败态
2. 若一个局面为必败态,则所有操作都只能转化为必胜态
NIM游戏的解法:
将当前局面的所有堆的石子数进行异或(也称为:NIM sum),
1)若NIM sum=0,则当前局面为必败态
2)若NIM sum≠0,则当前局面为必胜态


nim游戏原题:http://acm.hdu.edu.cn/showproblem.php?pid=1849
anti-NIM游戏的解法:
一个状态为必胜态,当且仅当:
1)所有堆的石子个数为1,且NIM_sum=0
2)至少有一堆的石子个数大于1,且 NIM_sum≠0

HDU有两道题均为anti-NIM问题:
http://acm.hdu.edu.cn/showproblem.php?pid=1907
http://acm.hdu.edu.cn/showproblem.php?pid=2509
下面是第一题的代码:
#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; }
本文深入探讨了NIM游戏与anti-NIM游戏的定义、解法及区别,详细介绍了如何通过异或运算判断游戏局面的胜败状态,并以HDU提供的题目为例,演示了解决anti-NIM问题的具体步骤。
1286

被折叠的 条评论
为什么被折叠?



