UVA11892 ENimEN —— 博弈

题目链接:https://vjudge.net/problem/UVA-11892

题意:

两人玩游戏,有n堆石子,每堆有ai块石子,两人轮流取,要求一次只能选择一堆石子取任意块。最后取完的获胜。

题解:

由于一堆石子可以取任意块,所以得出一个结论:当存在一堆石子数量大于1时,先手必胜。因为先手可以通过这些石子堆来调整自己的必胜状态(或者说取消对手的必胜状态)。但如果每堆石子只有一块,那就每次只能取一块,那结果显而易见了。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <cmath>
 7 #include <queue>
 8 #include <stack>
 9 #include <map>
10 #include <string>
11 #include <set>
12 using namespace std;
13 typedef long long LL;
14 const int INF = 2e9;
15 const LL LNF = 9e18;
16 const int MOD = 1e9+7;
17 const int MAXN = 20+10;
18 
19 int main()
20 {
21     int T, n;
22     scanf("%d", &T);
23     while(T--)
24     {
25         bool win = false;
26         scanf("%d", &n);
27         for(int i = 1; i<=n; i++)
28         {
29             int a;
30             scanf("%d", &a);
31             if(a>1) win = true;
32         }
33 
34         if(win || n%2) puts("poopi");
35         else puts("piloop");
36     }
37 }
View Code
原文地址:https://www.cnblogs.com/DOLFAMINGO/p/8349623.html