UVa 11892 ENimEN

题目分析

ENimEN\texttt{ENimEN}ENimEN 是一个改编自 Nim\texttt{Nim}Nim 游戏的两人博弈游戏。与传统 Nim\texttt{Nim}Nim 游戏不同的是,玩家在选择取石头的堆时受到限制:必须从对手上一轮取石头的非空堆中取石头(如果该堆还存在且非空),否则可以自由选择任意一堆。

解题思路

通过分析游戏规则和样例,我们可以得出以下结论:

  1. 所有堆都只有 111 个石头的情况

    • 游戏变成轮流取石头的固定顺序游戏
    • 当堆数 NNN 为偶数时,先手必败
    • 当堆数 NNN 为奇数时,先手必胜
  2. 至少有一堆多于 111 个石头的情况

    • 先手总是可以通过策略控制局面
    • 无论堆数 NNN 是奇数还是偶数,先手都必胜

这个结论的直观理解是:当存在至少一堆多于 111 个石头时,先手可以通过第一步操作来破坏游戏的对称性,迫使对手进入不利局面。

算法实现

基于上述分析,我们只需要:

  1. 检查是否所有堆都只有 111 个石头
  2. 如果是,根据堆数的奇偶性决定胜负
  3. 如果不是,先手必胜

参考代码

// 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值