top1编程
← 返回题目
题解

公交车

1 条题解

  • 0
    @ 2026-7-28 22:44:57
    #include<bits/stdc++.h>
    using namespace std;
    int a[200005];       // 存储每次停靠的乘客变化量
    long long c[200005]; // 前缀和数组,c[i]表示前i次停靠的累计变化
    long long s = 0;     // 记录过程中需要的最小初始乘客数
    int main() {
        int n;
        cin >> n;
        // 读入每次停靠的变化量并计算前缀和
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
            c[i] = c[i - 1] + a[i]; // c[i]是前i次停靠的累计变化
        }
        // 遍历每次停靠,当乘客减少时更新最小初始乘客数
        for (int i = 1; i <= n; i++) {
            if (a[i] < 0) { // 只在乘客减少时检查
            // 更新s:确保初始乘客数至少为 -c[i](即当前乘客数量不能是负数)
                s = max(s, -c[i]);
            }
        }
        // 最小初始乘客数 + 总变化量
        cout << s + c[n];
        return 0;
    }
    
    • 1