csp-j t2 40分
  • 板块学术版
  • 楼主zsr2011
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/10/26 13:06
  • 上次更新2023/11/2 11:22:00
查看原帖
csp-j t2 40分
727383
zsr2011楼主2023/10/26 13:06
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
	ll n,d,v[100010],a[100010]={0};
	ll ans=0,now=0;//now是当前位置 
	cin>>n>>d;
	for(ll i=0;i<n-1;i++){
		cin>>v[i];
	}
	for(ll i=0;i<n;i++){
		cin>>a[i];
	}
	ll shen=0;
	while(true){
		bool fl=true; 
		if(now==n-1) break;
		ll min=a[now],mini=now;//最小值与位置 
		for(ll i=now;i<n;i++){
			if(a[i]<min){
				min=a[i];
				mini=i;
				fl=false;
				break;
			}
		}//找前方最小值 
		ll js=0;//计数 
		if(fl){//没找到就买完 
			for(ll i=now;i<n;i++){
				js+=v[i];
			}
			int ansa=(js-shen)/d*a[now]+1;
			if((js-shen)%d==0) ansa-=1;
			cout<<ansa+ans;
			return 0;
		}
		for(ll i=now;i<mini;i++){
			js+=v[i];
		}//算路程 
		ll yo=(js-shen)/d+1;//要买几升 
		if((js-shen)%d==0) yo-=1;//整除-1 
		ans+=yo*a[now];
		shen+=yo*d-js;//开完后剩的油 
		now=mini;
		//out<<now<<' '<<ans<<' '<<shen<<' '<<js<<' '<<yo<<endl;
	}
	cout<<ans;
} 

AC11,12,14,15,16,17,19,20 剩下wa

2023/10/26 13:06
加载中...