社区讨论
-jT2赛时代码求调
灌水区参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @loh9lew7
- 此快照首次捕获于
- 2023/11/02 22:11 2 年前
- 此快照最后确认于
- 2023/11/03 10:26 2 年前
CPP
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f*=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
return x*f;
}
int k;//剩余可走多少路
int n,d,v[100010],a[100010],hz[100010],sta[100010],top,prv[100010],ans;
int main(){
// freopen("road.in","r",s/*tdin);
// freopen("road.out","w",st*/dout);
n=read(),d=read();
for(int i=1;i<n;i++){
v[i]=read();
}
for(int i=n-1;i>=1;i--){
prv[i]=v[i]+prv[i+1];
}
for(int i=1;i<=n;i++){
a[i]=read();
while(top&&a[sta[top]]>a[i]){hz[sta[top]]=i;top--;}
sta[++top]=i;
}
while(top){
hz[sta[top]]=-1;
top--;
}
for(int i=1;i<=n;){
if(hz[i]==-1){
if(k>prv[i]){
cout<<ans<<endl;
return 0;
}
int p=ceil((prv[i]-k)/d);
ans+=p*a[i];
break;
}else{
if(k>prv[i]-prv[hz[i]]){k-=prv[i]-prv[hz[i]];i=hz[i];continue;}
int p=ceil((1.0*prv[i]-prv[hz[i]]-k)/d);
k%=d;
k+=1.0*p*d-(prv[i]-prv[hz[i]]);//油量可走多少
ans+=p*a[i];
i=hz[i];
if(k>prv[i])
break;
}
}
printf("%d\n",ans);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...