蒙一武装直升机带班长:D • 1年前
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-1, 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;
}
评论:
请先登录,才能进行评论