#include <bits/stdc++.h>
using namespace std;
long long n, d, money = 0; // money为总钱
int main(){
cin >> n >> d;
long long v[n-1], a[n];
float m[n-1]{}, l = 0; // m为每一站钱,l为剩余油所能开的距离
for(long long i = 0;i <= n-2;i++){
cin >> v[i];
}
for(long long i = 0;i <= n-1;i++){
cin >> a[i];
}
for(long long i = 0;i <= n-2;i++){ // 首先判断下一站油单价是否比这一站贵 如果贵 则可以将下一段路要用的油在这一站买好 再判断下一站 以此类推
float dis = v[i]; // 该变量存储这一站要买能开多少距离的油
long long j=i+1; // 该变量存储已经判断到那一站
while(a[i] < a[j] and j <= n-2){ // 判断
dis += v[j];
j++;
}
m[i] = ceil((dis - l) / d) * a[i]; // 钱 = 油量(向上取整,如油有剩余则减去其能开的距离,有可能可以少买) * 单价
l = ceil((dis - l) / d) * d + l - dis; //剩余油所能开的距离 = 油量 * 每升油能开的距离 + 上回所剩油能开的距离 - 开的距离
// cout << m[i] << " "<< l << endl;
i=j-1; // 已经判断到第 j 站 要使得 i ++ 后是第 j 站
}
for(long long i = 0;i <= n-2; i++){ // 累加
money += m[i];
}
cout << money;
return 0;
}
意思注释里写了,得了45分,求调