50pts求调
查看原帖
50pts求调
576387
amlhdsan楼主2024/9/8 09:51
#include <iostream>
using namespace std;

int n, d;
int v[100001];
int a[100001];
long long sum = 0;
int l;
int noww;
int fee;
int s;
int L, LL = 0;
int cnt;

int main() {

    cin >> n >> d;

    v[1] = 0;

    for(int i = 2; i <= n; ++i) {
        cin >> v[i];
        v[i] += v[i - 1];
    }

    for(int i = 1; i <= n; ++i) {
        cin >> a[i];
    }

    a[n] = -1;

    // L: 加油的总数.
    if(v[n] % d == 0) {
        L = v[n] / d;
    }
    else {
        L = v[n] / d + 1;
    }
    

    noww= 1;
    fee = 0x7fffffff;

    while(noww < n) {
        cnt = noww + 1;
        while(cnt <= n) {
            if(a[cnt] < a[noww]) {
                break;
            }
            ++cnt;
        }
        s = v[cnt] - LL * d;
        if(s <= 0) {
            noww = cnt;
            continue;
        }
        
        if(s % d == 0) {
            l = s / d;
        }
        else {
            l = s / d + 1;
        }

        if(l >= L) {
            sum += L * a[noww];
            break;
        }

        L -= l;
        LL += l;
        sum += l * a[noww];
        noww = cnt;
    }

    cout << sum << endl;

    return 0;
}
2024/9/8 09:51
加载中...