J组T2求调
  • 板块学术版
  • 楼主gghack_Nythix
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/21 22:05
  • 上次更新2023/11/2 12:06:13
查看原帖
J组T2求调
895690
gghack_Nythix楼主2023/10/21 22:05

rt,感觉没问题,但是大样例过不去只有45pts,给个思路也可以。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int v[200005],a[200005],sum[200005],minn = LONG_LONG_MAX;
signed main(){
	int n,d;
	cin >> n >> d;
	for(register int i = 1;i < n;++i){
		cin >> v[i];
		sum[i] = sum[i - 1] + v[i];
	}
	for(register int i = 1;i <= n;++i){
		cin >> a[i];
		minn = min(minn,a[i]);
	}
	if(minn == a[1])cout << ceil(sum[n - 1] / double(d)) * minn << '\n';
	else {
		int nowsum = 0,lastoil = 0;
		for(register int i = 1;i < n;){
			int posnow = i;
			while(a[i] >= a[posnow] && i < n)++i;
			int nowo = ceil((sum[i - 1] - sum[posnow - 1]) / double(d)) * a[posnow];
			if(i == n)nowo = ceil((sum[i - 1] - sum[posnow - 1] - lastoil) / double(d)) * a[posnow];
			nowsum += nowo;
			int rd = (sum[i - 1] - sum[posnow - 1]);//±¾À´ÐÐ×ߵľàÀë 
			if(ceil((sum[i - 1] - sum[posnow - 1]) / double(d)) * d > rd)lastoil += ceil((sum[i - 1] - sum[posnow - 1]) / double(d)) * d - rd;
		}
		cout << nowsum << '\n';
	}
	return 0;
}
2023/10/21 22:05
加载中...