代码
//RP++;
#include <bits/stdc++.h>
using namespace std;
long long n,d;
long long v[100020],Price[100020];
long long dist=0;
long long NowOil=0;
long long SumDist=0;
void read()
{
scanf("%lld %lld",&n,&d);
for(long long i=1;i<n;i++)
{
scanf("%lld",&v[i]);
SumDist+=v[i];
}
for(long long i=1;i<=n;i++)
{
scanf("%lld",&Price[i]);
}
Price[n]=-1;
}
long long FindMin(long long x)
{
dist=0;
if(x==n)
{
return n+1;
}
for(long long i=x+1;i<=n;i++)
{
dist+=v[i-1];
if(Price[i]<Price[x])
{
return i;
}
}
}
long long Ceil(long long a,long long b)
{
if(a%b==0)
{
return a/b;
}else {
return a/b+1;
}
}
void doit()
{
long long Need=0;
for(long long i=1;i<=n;)
{
long long NowGo=FindMin(i);
Need+=Ceil(dist-NowOil,d)*Price[i];
NowOil=Ceil(dist-NowOil,d)*d+NowOil-dist;
SumDist-=dist;
if(NowOil>=SumDist)
{
break;
}
i=NowGo;
}
printf("%lld",Need);
}
void solve()
{
read();
doit();
}
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
solve();
return 0;
}
WA on #3 #18