社区讨论
很多人都是的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 条回复,欢迎继续交流。
正在加载回复...