求助,更改了索引后,结果却不一样了

是这样,为了看清楚结果对比,我是直接在洛谷该题的题解区吾皇网友的题解的基础上做出的一些修改。

可以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,但是在后续赋值时我也为此做了相应的调整,可是带来的后果确实只能过掉两个案例,我真挚的希望有人能帮我解答这个问题,我已经想了两三个小时了

全部评论
问题已经解决了,是一个很傻的点,因为后面的k会被赋值成j,而j有来自于m,如果m初始值是0,那么j=0时,k会为0,此时!k中的语句将会执行。
点赞 回复 分享
发布于 2023-10-21 09:48 湖南

相关推荐

05-19 15:21
已编辑
门头沟学院 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务