1 条题解

  • 0
    @ 2026-6-23 22:54:01
    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    
    int main() {
        int N;
        cin >> N;
        vector<ll> A(N), B(N);
        for (int i = 0; i < N; i++) cin >> A[i];
        for (int i = 0; i < N; i++) cin >> B[i];
    
        // 计算差分
        vector<ll> diff(N);
        ll pos = 0, neg = 0;
        for (int i = 0; i < N; i++) {
            diff[i] = B[i] - A[i];
            if (diff[i] > 0) pos += diff[i];
            else neg += -diff[i];
        }
    
        // 如果正负增量不相等,无法通过增减完成
        if (pos != neg) {
            cout << -1 << endl;
            return 0;
        }
    
        // 检查每个位置是否会降到负数
        ll cur = 0; // 当前累计的操作影响
        for (int i = 0; i < N; i++) {
            cur += diff[i]; // 累计到这个位置的操作影响
            if (A[i] + cur < 0) { // 操作过程中可能降到负数
                cout << -1 << endl;
                return 0;
            }
        }
    
        cout << pos << endl;
        return 0;
    }
    
    • 1

    信息

    ID
    2612
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    0
    上传者