关于JT2
  • 板块学术版
  • 楼主TheShuMo
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/21 22:39
  • 上次更新2023/11/2 12:04:54
查看原帖
关于JT2
304558
TheShuMo楼主2023/10/21 22:39

考场 10min 过样例35/ch

#include<bits/stdc++.h>
using namespace std;
const int Maxn = 1000010;
int v[Maxn];
int a[Maxn];
int s[Maxn];
int st[Maxn];
int Min[Maxn];
int l, r;
signed main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	int n, d;
	cin >> n >> d;
	for(int i = 1; i < n; i++) cin >> v[i], s[i + 1] = s[i] + v[i]; 
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i < n; i++){
		while(a[st[r]] > a[i]){
			Min[st[r--]] = i;
		}
		st[++r] = i;
	}
	int ans = 0, last = 0;
	int i = 1;
	while(1){
		if(!Min[i]){
			int ys;
			if((s[n] - s[i] - last) % d == 0) {
				last = 0;
				ys = (s[n] - s[i] - last) / d;
			}else {
				ys = (s[n] - s[i] - last) / d + 1; 
				last = d - (s[n] - s[i] - last) % d;
			}
			ans += ys * a[i];	
			cout << ans;
			return 0;
		}
		else {
			int ys;
			if((s[Min[i]] - s[i] - last) % d == 0) {
				last = 0;
				ys = (s[Min[i]] - s[i] - last) / d;
			}else {
				ys = (s[Min[i]] - s[i] - last) / d + 1; 
				last = d - (s[Min[i]] - s[i] - last) % d;
			}
			ans += ys * a[i];
			i = Min[i];
		}
	}
	cout << ans;
	return 0;
}

why?

2023/10/21 22:39
加载中...