社区讨论

很多人都是的50分求大神解答

P9749[CSP-J 2023] 公路参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lodugtnk
此快照首次捕获于
2023/10/31 12:44
2 年前
此快照最后确认于
2023/11/02 10:34
2 年前
查看原帖
小图灵上是90分,CCF给的是五十分,即一到十的五次方就WA,前十组都对,后十组都答案错误
CPP
#include<bits/stdc++.h>
using namespace std;
long long n,k,nn,yo,lc,pr;
long long s1[100010],v[100010],a[100010],ne[100010],s2[100010];
long long ans;
int main()
{
	//freopen("road10.in","r",stdin);
	//freopen("road10.out","w",stdout);
	cin>>n>>k;
	for(long long i=1;i<=n-1;i++){
		cin>>v[i];
	}
	for(long long i=1;i<=n;i++){
		cin>>a[i];
	}
	//cout<<11111111ll;
	for(int i=1;i<n;i++){
		s1[i]=s1[i-1]+v[i];
	}
	
	//(int i=1;i<=n;i++){
		//s2[i]=s2[i-1]+a[i];
	//}
	for(int i=1;i<n;){
		int ii=i;
		for(int j=i+1;j<=n;j++){
			if(a[j]<a[i]){
				ne[i]=j;
				i=j;break;
			}
			
			}
			if(ne[ii]==0){
				
				ne[ii]=n;
				
				break;
			}
		ii=i;
		//Find the middle errors
		
	}
	//for(int i=1;i<n;i++)cout<<ne[i]<<' ';// At least it's right behind here
	int mm=1;
	for(;;){
				nn=ne[mm];//jl is right
				if(!nn)break;
				int jl=s1[nn-1]-s1[mm-1];
				int dy=((jl-yo)%k>=1);
				lc=(jl-yo)/k+dy;
				pr=lc*a[mm];
				yo=(lc*k+yo)-jl;
				ans+=pr;
				mm=nn;
				//cout<<pr<<' ';
		}
	cout<<ans<<endl;
	return 0;
}

奉上考试时的无语代码,求大佬帮助!感激不尽

回复

2 条回复,欢迎继续交流。

正在加载回复...