B3628 机器猫斗恶龙

题目描述

机器猫出门斗恶龙了!他需要通过 𝑛 个关卡。

每个关卡要么是与怪物战斗,扣除一定的血量;要么是营地,给机器猫增加一定的血量。

在旅途中,机器猫任意时刻的血量不能低于或等于 0。问机器猫至少需要多少的初始血量,才能完成任务。

血量为正整数。

输入格式

第一行,一个正整数 𝑛n,表示关卡数量。

第二行,共 𝑛n 个整数 𝑎𝑖ai​,表示每个关卡。

  • 若 𝑎𝑖>0,则表示这个关卡是营地,增加 𝑎𝑖 的血量
  • 若 𝑎𝑖<0,则表示这个关卡是战斗,机器猫血量代价为 𝑎𝑖

输出格式

仅一行,一个正整数,表示机器猫需要的初始血量。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n, a[100005];

void input() {
    cin >> n;
    for(int i = 1; i <= n; i++)
        cin >> a[i]; // a[i] 是血的变化量
}

bool check(int x) { // 计算 x 点血是否可以活下来
    int hp = x;
    for(int i = 1; i <= n; i++){
        hp += a[i]; // hp增加或者减少
        if(hp <= 0) return false; // 如果活不下来返回 false
    }
    return true; // 如果可以活下来,返回 true
}
void work() {
    int l = 1, r = 1000 * 100000, mid;
    int ans = r;
    while(l <= r) {
        mid = (l + r) / 2;
        if(check(mid)) {  // 检查mid血,发现可以活下来
            ans = mid; // 记录下答案
            r = mid - 1; // 继续找左区间
        } else           // 如果发现活不下来
            l = mid + 1; // 继续找右区间
    }
    cout << ans << endl;
}

int main() {
    input();
    work();

    return 0;
}
相关推荐
设计师小聂!12 分钟前
力扣热题100--------240.搜索二维矩阵
java·算法·leetcode·矩阵
啊森要自信14 分钟前
【QT】Qt 信号与槽的使用详解&&连接方式&&Lambda表达式定义槽函数
android·开发语言·c++·qt·qt5
人邮异步社区17 分钟前
先学Python还是c++?
开发语言·c++·python
yuyanjingtao21 分钟前
CCF-GESP 等级考试 2025年6月认证C++一级真题解析
c++·青少年编程·gesp·csp-j/s·编程等级考试
yzzzzzzzzzzzzzzzzz1 小时前
leetcode热题——组合
算法·回溯·组合问题
RTC老炮1 小时前
webrtc弱网-QualityScaler 源码分析与算法原理
人工智能·算法·webrtc
柒柒的代码学习日记3 小时前
二叉树链式结构的遍历实现
数据结构·二叉树·链式结构
程序员老舅5 小时前
C++音视频开发:基础面试题
c++·ffmpeg·音视频·视频编码·h264·音视频编解码·视频解码
码破苍穹ovo6 小时前
堆----1.数组中的第K个最大元素
java·数据结构·算法·排序算法
愤怒的小鸟~~~6 小时前
c语言创建的一个队列结构(含有这个头指针和这个尾指针的结构具有一定的参考价值)
c语言·开发语言·算法