博弈游戏·Nim游戏
http://hihocoder.com/contest/hiho44/problem/1
Nim游戏
N堆石子,每堆有任意个数的石子
2个玩家轮流取石子,每次从某一堆中取,最少1个,最多取光
最后一个取光石子的人获胜
Alice先取,问最后谁赢
原文中的提示非常详尽。看似复杂,结论却十分简单:
P-position:在当前的局面下,先手必败。
N-position:在当前的局面下,先手必胜。
他们有如下性质:
1.合法操作集合为空的局面是P-position;
2.可以移动到P-position的局面是N-position;
3.所有移动都只能到N-position的局面是P-position。
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; 6 while (scanf("%d", &n) != EOF) 7 { 8 int* arr = new int[n]; 9 for (int i = 0; i < n; i++) 10 scanf("%d", &arr[i]); 11 12 int ans = 0; 13 for (int i = 0; i < n; i++) 14 ans ^= arr[i]; //异或 15 16 printf("%s\n", ans != 0 ? "Alice" : "Bob"); 17 18 delete[] arr; 19 } 20 return 0; 21 }