#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
long long n,d;
long long v[N],a[N];//v是当前站与下一站的距离,a是当前站加油的价格
long long t=1,lasts;//t记录哪一站的油价最低,lasts记录当前剩余的油可走的路程
long long ans;//记录总价格
int main()
{
scanf("%lld%lld",&n,&d);
for(int i=1;i<n;i++) scanf("%lld",&v[i]);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<n;i++)
{
if(a[t]<a[i])
{
int k=v[i]-lasts;
if(k%d==0)
{
ans+=k/d*a[t];
lasts=0;
}
else
{
ans+=(k/d+1)*a[t];
lasts=(k/d+1)*d-v[i];
}
}
else
{
t=i;
int k=v[i]-lasts;
if(k%d==0)
{
ans+=k/d*a[i];
lasts=0;
}
else
{
ans+=(k/d+1)*a[i];
lasts=(k/d+1)*d-v[i];
}
}
//printf("当前在第%d站,第%lld站油价最低,目前总价格%lld元,多出的油可行驶%lld公里\n",i,t,ans,lasts);
}
cout<<ans<<endl;
return 0;
}
只有vi是d的倍数的三个点对了,估计是lasts计算的问题。