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;
}
相关推荐
布莱克6052 小时前
C++拷贝构造与拷贝赋值运算符的区别详解
开发语言·c++
Lyyaoo.3 小时前
【普通数组】【中等】除了自身以外数组的乘积
数据结构·算法·leetcode
threerocks3 小时前
《The AI-Native SDLC Playbook》万字拆解
算法·aigc·ai编程
夏玉林的学习之路3 小时前
算法8.环形队列
算法
啦啦啦啦啦zzzz4 小时前
时间轮定时器
linux·服务器·网络·c++·定时器
O。O蛋黄酥啊4 小时前
GraphRAG 和 LightRAG 详解与对比
人工智能·python·算法·rag·graphrag·lightrag
Σίσυφος19004 小时前
depth_from_focus 详解
算法
疯狂打码的少年4 小时前
【数据结构】八大排序算法对比总结(时间/空间/稳定性)
数据结构·笔记·算法
此生决int4 小时前
深入理解C++系列(15)——AVL树
开发语言·c++
一只旭宝4 小时前
预约系统版本2(pyhton+flask可视化版本)
服务器·数据库·c++·笔记·python·flask