只有样例过了
#include<bits/stdc++.h>
using namespace std;
int n,d;
int ML=0;//剩余可行使路程
int allmoney=0; //总花费
int sum=1;//当前的站点数
int t[(int)1e5+10],m[(int)1e5+10];
int main() {
freopen("road2.in","r",stdin);
cin>>n>>d;
for(int i=2;i<=n;i++) {
cin>>t[i];
}
for(int i=1;i<=n;i++) {
cin>>m[i];
}
while(sum!=n) {
if(ML<t[sum+1]) { //油不够
int cnt=0; //站数
for(int i=sum+1;i<=n;i++) { //查看当前油价是否是最少
if(m[i]>=m[sum]) {
cnt++;
}else { //有价格更低的
break;
}
}
int money=m[sum];
int ml=0; //要买升数
if(cnt==0) { //这站最贵只买这站的钱
ml+=(t[sum+1]-ML)/d+((t[sum+1]-ML)%d!=0); //要买油的升数
}else {
int luchen=0;
for(int i=sum;i<=sum+cnt;i++) { //统计路程
luchen+=t[i];
}
ml+=(luchen-ML)/d+((luchen-ML)%d!=0); //要买油的升数
}
allmoney+=ml*money;
ML+=ml*d;
// cout<<endl<<sum<<" "<<ml<<" "<<ML<<endl;
}
ML-=t[sum+1];
sum++;
}
cout<<allmoney<<endl;
return 0;
}