题目分析
ENimEN\texttt{ENimEN}ENimEN 是一个改编自 Nim\texttt{Nim}Nim 游戏的两人博弈游戏。与传统 Nim\texttt{Nim}Nim 游戏不同的是,玩家在选择取石头的堆时受到限制:必须从对手上一轮取石头的非空堆中取石头(如果该堆还存在且非空),否则可以自由选择任意一堆。
解题思路
通过分析游戏规则和样例,我们可以得出以下结论:
-
所有堆都只有 111 个石头的情况
- 游戏变成轮流取石头的固定顺序游戏
- 当堆数 NNN 为偶数时,先手必败
- 当堆数 NNN 为奇数时,先手必胜
-
至少有一堆多于 111 个石头的情况
- 先手总是可以通过策略控制局面
- 无论堆数 NNN 是奇数还是偶数,先手都必胜
这个结论的直观理解是:当存在至少一堆多于 111 个石头时,先手可以通过第一步操作来破坏游戏的对称性,迫使对手进入不利局面。
算法实现
基于上述分析,我们只需要:
- 检查是否所有堆都只有 111 个石头
- 如果是,根据堆数的奇偶性决定胜负
- 如果不是,先手必胜
参考代码
// ENimEN
// UVa ID: 11892
// Verdict: Accepted
// Submission Date: 2025-11-01
// UVa Run Time: 0.010s
//
// 版权所有(C)2025,邱秋。metaphysis # yeah dot net
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);
int T;
cin >> T;
while (T--) {
int N;
cin >> N;
bool allOne = true;
int a;
for (int i = 0; i < N; i++) {
cin >> a;
if (a > 1) allOne = false;
}
if (allOne) {
if (N % 2 == 0) cout << "piloop\n";
else cout << "poopi\n";
} else cout << "poopi\n";
}
return 0;
}


1515

被折叠的 条评论
为什么被折叠?



