50分求救命【第11个点开始往后错】
查看原帖
50分求救命【第11个点开始往后错】
119265
渣渣炜楼主2023/11/25 00:32
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000000+10;
long long a[MAXN],b[MAXN],c[MAXN];
//a是距离前缀和,b是费用,c是每次去的车站编号
int main(){
	long long n,d;
	cin>>n>>d;
//	long long a[n+1],b[n+1],c[n+1];
//	memset(a,0,sizeof a);
//	memset(b,0,sizeof b);
//	memset(c,0,sizeof c);
	for(int i=1;i<n;i++){
		cin>>a[i];
		a[i]+=a[i-1];
	}
	long long minn=100000,p=0;
	for(int i=1;i<=n;i++){
		cin>>b[i];
		if(b[i]<minn)
			minn=b[i],c[p++]=i;	
	}
	if(c[p-1]!=n)c[p]=n;
		
	long long oil=0,sum=0;//oil是现有油能走的路,sum是需要花的钱总数
	for(int i=0;c[i+1]!=0;i++){
		int now=c[i],next=c[i+1];//当前在哪和下站在哪
		int need=a[next-1]-a[now-1];//需要走多少
		if(need>=oil){
			sum+=ceil(1.0*(need-oil)/d)*b[now];
			oil+=ceil(1.0*(need-oil)/d)*d;
		}
		oil-=need;
	}
	cout<<sum;
	return 0;
}
2023/11/25 00:32
加载中...