csp-j T2 90分求调
  • 板块学术版
  • 楼主Wangfeiyang
  • 当前回复17
  • 已保存回复19
  • 发布时间2023/10/22 15:22
  • 上次更新2023/11/2 11:53:35
查看原帖
csp-j T2 90分求调
657502
Wangfeiyang楼主2023/10/22 15:22
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 10;
ll n, d;
ll a[N], sum[N], p[N];

ll find1(ll now) {
	for(int i = now + 1; i <= n; i ++) {
		if(p[i] < p[now]) {
			return i;
		}
	}
	return n;
}

ll find2(ll now, ll next) {
	return sum[next] - sum[now];
}

int main(){
    cin >> n >> d;
    for(int i = 2; i <= n; i ++) {
    	cin >> a[i];
    	sum[i] = sum[i - 1] + a[i]; // 前缀和优化 
	}
	for(int i = 1; i <= n; i ++) {
		cin >> p[i];
	}
	
	ll now = 1; // 当前站点 
	ll ans = 0;
	ll x = 0; // 剩余油量 
	while(now) {
		if(now == n) break;
		ll next = find1(now); // 下一个目标站点的 位置 
		ll dx = find2(now, next); // 当前站点 到 下一个目标站点的 距离 
		dx -= x;
		if(dx % d == 0) {
			ans = ans + dx / d * p[now];
			x = 0;
		} else {
			ans = ans + (dx / d + 1) * p[now];
			x = (dx / d + 1) * d - dx;
		}
		now = next;
	}
	
	cout << ans << endl;
 	return 0;
}

2023/10/22 15:22
加载中...