A题,用例通过率0%,求大佬帮忙看看

#include<stdio.h>
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,i;
        scanf("%d",&n);
        //a是上升区间左端点,b是右端点,s是输入的数据。ti是当前上升区间起始点,maxed是最大值,ta是a,b数组当前使用的下标
        int a[n],b[n],s[n],ti=0,maxd=0,ta=0;
        scanf("%d",s);//先手把第一个数字输入进来,反正n>=2,这样子防止下面的i-1越界
        for(i=1;i<n;i++){
            scanf("%d",s+i);
            if(s[i]<s[i-1]){//当后面一个数字比前面一个大的时候表示上升结束
                int tdis = s[i-1]-s[ti];
                if(tdis>maxd){//当maxd要更新的时候,初始化a,b数组
                    memset(a,0,sizeof(a));
                    memset(b,0,sizeof(b));
                    ta=0;
                    a[ta]=ti;
                    b[ta++]=i-1;
                    maxd=tdis;
                }else if(tdis==maxd)a[ta]=ti,b[ta++]=i-1;//当最大长度相等的时候就只在后面补
                ti=i;//更新最大序列
            }
        }
        //结束的时候检查一遍,防止漏掉最后一组
        if(s[n-1]>=s[n-2]){
            int tdis = s[i-1]-s[ti];
            if(tdis>maxd){
                memset(a,0,sizeof(a));
                memset(b,0,sizeof(b));
                ta=0;
                a[ta]=ti;
                b[ta++]=n-1;
                maxd=tdis;
            }else if(tdis==maxd)a[ta]=ti,b[ta++]=n-1;
        }
        //输出
        printf("%d %d",a[0]+1,b[0]+1);
        for(i=1;i<ta;i++)printf(" %d %d",a[i]+1,b[i]+1);
        //换行
        printf("\n");
    }
}
我人都傻了,A题都AC不了了,但是找不出原因,求大佬帮忙看看~
题例可以通过,我自己编的几个例子也都是可以通过的……
全部评论

相关推荐

点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务