#include<bits/stdc++.h>
using namespace std;
long long ans=0,n,d,v[100005],a[100005];
int main()
{
cin>>n>>d;
for(int i=2;i<=n;i++)
cin>>v[i];
for(int i=1;i<=n;i++)
cin>>a[i];
long long bg=1,na=a[1],nd=0,sd=0;
while(true)
{
if(bg==n)
{
ans=ans+(nd+d-1)/d*na;
break;
}
bg++;
nd+=v[bg];
if(a[bg]<na)
{
nd-=sd;
ans=ans+(nd+d-1)/d*na;
na=a[bg];
sd=(nd+d-1)/d*d-nd;
nd=0;
}
}
cout<<ans<<endl;
return 0;
}
ans就是总花费,bg是当前所在站点,na为当前油价,nd为当前以na为油价行驶的总距离,sd为行驶完nd距离后买油时产生的多余距离
我的想法是先一直开直到到了1个站点让na发生改变后在用老的na付玩油价,na只在当前油价低于na时改变