-jT2赛时代码求调
  • 板块灌水区
  • 楼主lishitang
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/11/2 22:06
  • 上次更新2023/11/3 10:26:49
查看原帖
-jT2赛时代码求调
736900
lishitang楼主2023/11/2 22:06
#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;
}
2023/11/2 22:06
加载中...