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;
}
相关推荐
AI人工智能+电脑小能手6 分钟前
【大白话说Java面试题 第47题】【JVM篇】第7题:Young GC 和 Full GC 分别采用什么算法?
java·jvm·后端·算法·面试
wmm_会飞的@鱼7 分钟前
FlexSim-基于SLP方法的A汽车企业总装车间布局优化
前端·数据结构·数据库·python·数学建模·汽车
艾莉丝努力练剑10 分钟前
【Linux网络】Linux 网络编程:应用层自定义协议与序列化(3):网络计算器实现和守护进程
linux·运维·服务器·网络·c++·计算机网络·安全
Ulyanov12 分钟前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 同台竞技——3-DOF与6-DOF模型的终极对决与误差分析
开发语言·python·算法·系统仿真·雷达电子对抗仿真
Severus_black12 分钟前
【初阶数据结构】链式二叉树(BinaryTreeNode)与递归
c语言·数据结构·链表
Hesionberger14 分钟前
LeetCode98:验证二叉搜索树(多解)
java·开发语言·python·算法·leetcode·职场和发展
千寻girling14 分钟前
周日那天参加的力扣周赛... —— 10号
java·javascript·c++·python·算法·leetcode·职场和发展
guygg8814 分钟前
基于 DWT 的盲数字水印实现(嵌入与提取)
算法
鱼子星_17 分钟前
最短路问题【图论】
数据结构·算法·贪心算法·动态规划·图论
研究点啥好呢23 分钟前
dji机器人SLAM算法工程师 面试题精选:10道高频考题+答案解析
c++·算法·机器人·slam·dji