博弈游戏·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 }

 

posted @ 2015-05-06 14:18  iswoit  阅读(146)  评论(0编辑  收藏  举报