求调(悬关)
查看原帖
求调(悬关)
736239
wanghu楼主2024/10/13 17:35
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1000001],b[1000001],s,p,c[1000001];
signed main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n-1;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	for(int i=1;i<=n;){
		int t=0;
		for(int j=i;j<=n;j++){
			if(b[j]<b[i]){
				int s1=0;
				for(int k=i;k<=j-1;k++){
					s1=s1+a[k];
				}
				if(s1%m==0){
					s1=s1/m;
					s=s+b[i]*s1;
				}//如果总距离和每升油能开的距离成倍数关系,就买刚好能到那里的油 
				else{
					s1=s1/m+1;
					s=s+b[i]*s1;
					p=p+s1%m;
					if(p>m){
						p=p-m;
						s=s-b[i];
					}
				}//否则多买一升 
				i=j;
				t=1;
				break;
			}
		}
		if(t==0){
			int s1=0;
			for(int k=i;k<=n-1;k++){
				s1=s1+a[k];
			}
			if(s1%m==0){
				s1=s1/m;
				s=s+b[i]*s1;
			}//如果总距离和每升油能开的距离成倍数关系,就买刚好能到那里的油 
			else{
				s1=s1/m+1;
				s=s+b[i]*s1;
				p=p+s1%m;
				if(p>m){
					p=p-m;
					s=s-b[i];
				}
			}//否则多买一升
			break;
		}
	}
	cout<<s;
	return 0;
} 
2024/10/13 17:35
加载中...