#include<iostream>
using namespace std;
long long n,d,v[100001],a[100001],money,buymoney,restway;
int main()
{
cin>>n>>d;
for(int i=1;i<n;i++) cin>>v[i];
for(int i=1;i<=n;i++) cin>>a[i];
buymoney=a[1];
restway=(v[1]%d==0)?(0):(v[1]%d);
money=(v[1]%d==0)?(a[1]*v[1]/d):(a[1]*(v[1]/d+1));
for(int i=2;i<=n;i++)
{
if(buymoney>a[i])
{
if(restway>=v[i])
{
restway=restway-v[i];
money+=0;
buymoney=a[i];
}
else
{
int tmp=(v[i]-restway)/d;
if((v[i]-restway)%d!=0)
tmp=tmp+1;
restway=restway+tmp*d-v[i];
money=money+tmp*a[i];
buymoney=a[i];
}
}
else
{
int tmp=(v[i]-restway)/d;//定义tmp保存要买多少油
if((v[i]-tmp)/d) money+=((v[i]-tmp)/d+1)*a[i]//这一步不太会写。就是说如果要买的路程不能整除,那么不但要加1,还要重置restway
else money+=(v[i]-tmp)/d*a[i],restway=0;//如果可以整除,restway直接清零,因为没有剩余
}
}
cout<<money<<endl;
return 0;
}
写注释的三行是有问题的,具体思路就是那样,老师。