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 }