http://acm.hdu.edu.cn/showproblem.php?pid=1849
用到异或操作。具体讲解见百度百科http://baike.baidu.com/view/1101962.html
结论:(Bouton's Theorem)对于一个Nim游戏的局面(a1,a2,...,an),它是P-position当且仅当a1^a2^...^an=0,其中^表示异或(xor)运算。怎么样,是不是很神奇?我看到它的时候也觉得很神奇,完全没有道理的和异或运算扯上了关系。但这个定理的证明却也不复杂,基本上就是按照两种position的证明来的。
//nim game #include <stdio.h> int main() { int n, a; while(scanf("%d", &n)&&n){ int res = 0; while(n--){ scanf("%d", &a); res ^= a; } if(res == 0)printf("Grass Win!\n"); else printf("Rabbit Win!\n"); } return 0; }