求调,急急急,谢谢啦
查看原帖
求调,急急急,谢谢啦
1338936
FingerWizard楼主2024/10/5 21:50
#include <bits/stdc++.h>
using namespace std;
long long n, d, money = 0; // money为总钱 
int main(){
	cin >> n >> d;
	long long v[n-1], a[n];
	float m[n-1]{}, l = 0; // m为每一站钱,l为剩余油所能开的距离 
	for(long long i = 0;i <= n-2;i++){
		cin >> v[i];
	}
	for(long long i = 0;i <= n-1;i++){
		cin >> a[i];
	}
	for(long long i = 0;i <= n-2;i++){ // 首先判断下一站油单价是否比这一站贵 如果贵 则可以将下一段路要用的油在这一站买好 再判断下一站 以此类推 
		float dis = v[i]; // 该变量存储这一站要买能开多少距离的油 
		long long j=i+1; // 该变量存储已经判断到那一站 
		while(a[i] < a[j] and j <= n-2){ // 判断 
			dis += v[j];
			j++;
		}
		m[i] = ceil((dis - l) / d) * a[i]; // 钱 = 油量(向上取整,如油有剩余则减去其能开的距离,有可能可以少买) * 单价 
		l = ceil((dis - l) / d) * d + l - dis; //剩余油所能开的距离 = 油量 * 每升油能开的距离 + 上回所剩油能开的距离 - 开的距离 
//		cout << m[i] << " "<< l << endl;
		i=j-1; // 已经判断到第 j 站 要使得 i ++ 后是第 j 站 
	}
	for(long long i = 0;i <= n-2; i++){ // 累加 
		money += m[i];
	}
	cout << money;
	
	return 0;
}

意思注释里写了,得了45分,求调

2024/10/5 21:50
加载中...