当前位置:首页 > 牛客 > 牛客22296题解:关灯游戏胜负判断的模拟算法与代码实现

牛客22296题解:关灯游戏胜负判断的模拟算法与代码实现

6个月前 (09-12)

牛客22296题解:关灯游戏胜负判断的模拟算法与代码实现 牛客题解 模拟 C++ 第1张

一、题目解读

牛客22296题描述了一个关灯游戏:有n个灯泡,每个灯泡初始状态为关闭(0)或打开(1)。玩家Alice和Bob轮流操作,最后操作最后一个灯泡的人获胜。题目要求根据输入的灯泡状态序列,判断最终获胜者。核心在于通过状态序列推断最后一次操作的对象,从而确定胜负。

二、解题思路

采用简单模拟策略解题。代码通过循环依次读取每个灯泡的状态,仅记录最后一个灯泡的状态(last_bulb)。由于胜负取决于最后一个灯泡的操作权,无需考虑中间状态变化,直接根据最后状态判断:若last_bulb为打开(1),则Alice获胜;否则Bob获胜。该解法时间复杂度O(n),空间复杂度O(1),高效直观。

三、解题步骤

1. 初始化变量last_bulb = 0,表示初始状态未知或未记录。

2. 循环读取n个灯泡状态:

○ 若当前为最后一个灯泡(i == n - 1),更新last_bulb为当前状态。

3. 根据last_bulb值输出获胜者:若为1则输出"Alice",否则输出"Bob"。

四、代码与注释

#include <iostream>  
using namespace std;  

int main() {  
    int n;  
    cin >> n;         // 输入灯泡数量  

    int last_bulb = 0;  // 记录最后一个灯泡的状态  
    for (int i = 0; i < n; ++i) {  
        int state;  
        cin >> state;   // 读取当前灯泡状态  
        if (i == n - 1) {  // 若为最后一个灯泡  
            last_bulb = state;  // 更新记录  
        }  
    }  

    cout << (last_bulb? "Alice" : "Bob") << endl;  // 根据状态判断输出  
    return 0;  
}

五、总结

本题通过简化问题本质,将复杂游戏规则转化为对最后一个状态的追踪,避免了繁琐的逻辑模拟。代码利用循环直接获取关键信息,体现了“抓住核心,忽略冗余”的解题思想。掌握此类简化策略,对处理类似逻辑判断问题具有启发意义。

原创内容 转载请注明出处

分享给朋友:

相关文章

力扣746:三步通关最小花费爬楼梯

力扣746:三步通关最小花费爬楼梯

题目解析:站在楼梯的某个台阶时,需要支付当前台阶对应的体力值cost[i],之后可以选择向上爬1或2个台阶。最终目标是到达‌楼层顶部‌(即数组末尾之后的位置),且初始位置可选择下标0或1的台阶作为起点...

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

题目重解我们面对一个经典背包问题的变体:给定n个物品,每个物品有重量w和价值v,背包容量为V。需要回答两个问题:1) 普通情况下能获得的最大价值;2) 必须恰好装满背包时的最大价值(若无法装满则输出0...

力扣654:递归分治的艺术 如何用最大元素构建二叉树

力扣654:递归分治的艺术 如何用最大元素构建二叉树

题目重解我们面对一个看似简单却充满递归魅力的题目:给定一个不含重复元素的整数数组,需要构建一棵特殊的二叉树。这个树的每个父节点都必须是当前子数组中的最大元素,而它的左右子树则分别由该最大值左侧和右侧的...

力扣144:递归之美 轻松掌握二叉树前序遍历

力扣144:递归之美 轻松掌握二叉树前序遍历

题目解读二叉树的前序遍历是一种基础但重要的树遍历方式,其遍历顺序为:先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。给定一个二叉树的根节点,我们需要按照这个顺序访问所有节点,并将它们...

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

力扣第44题:寻找两个正序数组的中位数 - 合并排序解法详解

内容简介本文详细解析了力扣第44题"寻找两个正序数组的中位数"的合并排序解法。通过双指针技术合并两个有序数组,然后直接计算合并后数组的中位数。虽然时间复杂度为O(m+n),但这种方...

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

一、题目解读力扣3112题要求解决带时间限制的最短路径问题:给定一个有向图,节点具有消失时间,需计算从起点到各节点的最短路径,且路径总时间不能超过节点的消失时间。题目难点在于需在传统最短路径算法(如D...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。