CSP-J T2 95pts求助
  • 板块学术版
  • 楼主HZHDCM
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/24 19:05
  • 上次更新2023/11/2 11:33:57
查看原帖
CSP-J T2 95pts求助
817681
HZHDCM楼主2023/10/24 19:05

rt有题解,但是我还是想用自己的方法,但不知道怎么改

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
ll n,d,ans,cnt,ans1;
ll a[N],v[N];
int main(){
//	freopen("road.in","r",stdin);
//	freopen("road.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>d;
	for(int i=1;i<n;i++)cin>>v[i];
	for(int i=1;i<=n;i++)cin>>a[i];
	if(v[1]%d==0)
	    cnt=v[1]/d*a[1];
	else{
	    ans1=(v[1]/d+1)*d-v[1];
	    cnt=(v[1]/d+1)*a[1];
	}
	ll kobe=cnt;
	ll nn=cnt;
	ll yuan=a[1];
	for(int i=2;i<n;i++){
		v[i]-=ans1;
		ll op,kobe;
		if(v[i]<=0){
			v[i]+=ans1;
			ans1-=v[i];
			continue;
		}
		else if(v[i]%d==0){
			op=v[i]/d*a[i];
			kobe=v[i]/d*yuan;
			nn=min(op,kobe);
			if(kobe>op)yuan=a[i];
			cnt+=nn;
		}
		else{
			op=(v[i]/d+1)*a[i];
			kobe=(v[i]/d+1)*yuan;
			nn=min(op,kobe);
			if(kobe>op)yuan=a[i];
			cnt+=nn;
		}
		if(v[i]%d==0)ans1=0;
		else ans1=(v[i]/d+1)*d-v[i];
	}
	cout<<cnt;
	return 0;
}
2023/10/24 19:05
加载中...