求助,更改了索引后,结果却不一样了
是这样,为了看清楚结果对比,我是直接在洛谷该题的题解区吾皇网友的题解的基础上做出的一些修改。
可以AC的代码:
#include<stdio.h> int opt,n,t,p,ans,top,m=1,yh[100001],sj[100001],k;//m即为可以使用的优惠券的左端点值,top为右端点值 int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d%d",&opt,&p,&t); if(opt==0) { yh[++top]=p; sj[top]=t; ans+=p; } else{ k=0;//做标记 for(int j=m;j<=top;j++){ if(sj[j] == -1) continue;//如果用过直接跳过,-1代表不能使用 if(t-sj[j]>45) m=j;//过期 else if(yh[j]>=p){ k=j;//只要有能用的直接用 sj[k]=-1;//记录已经使用 break;//退出循环 } } if(!k) ans+=p; //k未变,代表没有使用优惠卷 } } printf("%d",ans); }
不能AC的代码
#include<stdio.h> int opt,n,t,p,ans,top,m,yh[100001],sj[100001],k;//m即为可以使用的优惠券的左端点值,top为右端点值 int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d%d",&opt,&p,&t); if(opt==0) { yh[top]=p; sj[top++]=t; ans+=p; } else{ k=0;//做标记 for(int j=m;j<top;j++){ if(sj[j] == -1) continue;//如果用过直接跳过,-1代表不能使用 if(t-sj[j]>45) m=j;//过期 else if(yh[j]>=p){ k=j;//只要有能用的直接用 sj[k]=-1;//记录已经使用 break;//退出循环 } } if(!k) ans+=p; //k未变,代表没有使用优惠卷 } } printf("%d",ans); }
事实上,我只是将初始的时候的m改为了0,但是在后续赋值时我也为此做了相应的调整,可是带来的后果确实只能过掉两个案例,我真挚的希望有人能帮我解答这个问题,我已经想了两三个小时了