50求调
查看原帖
50求调
867076
pukelixuanlin楼主2024/10/21 15:07
#include<bits/stdc++.h>
using namespace std;
using LL = long long;
struct node{
	int s;
	int price;
}a[100001];
LL b[100001];
int main(){
	LL total=0;
	int n,d;
	cin>>n>>d;
	b[0]=0;
	for(int i=1;i<=n-1;i++){
		cin>>a[i].s;
		b[i]=b[i-1]+a[i].s;
	}
	for(int i=1;i<=n;i++){
		cin>>a[i].price;
	}
	////////////////////////////////
	///////////////////////////////
	int book; //标记 
	int x=0;//第i站到第j站间距离加上i-1站多出距离 
	int l=0;//多出距离 
	int k;//所需油升数 
	for(int i=1;i<=n;i++){
		book=0; 
		for(int j=i+1;j<=n;j++){
			if(a[j].price<a[i].price){
			book=1;			//找到更小站 
			x=b[j-1]-b[i-1]-l; //前缀和 
			l=0;
			if(x%d==0){
				k=x/d; 
				total+=k*a[i].price;
			}else{
				k=x/d+1;
				total+=k*a[i].price;
				l=k*d-x;
			}
				i=j-1;
				break;
			}
		}
		if(book==0&&i!=n){  //当前站为油价最小站 
			x=b[n-1]-b[i-1]-l;
//			cout<<x<<endl;
			if(x%d==0){
				k=x/d; 
				total+=k*a[i].price;
			}else{
				k=x/d+1;
				total+=k*a[i].price;
			}
			break;
		}
	}
	cout<<total;
}
2024/10/21 15:07
加载中...