竞赛讨论区 > 麻烦大佬们帮忙看一下错在哪了,用例通过率为 53.85%
头像
爱唱歌的托尼在debug
发布于 2023-04-28 16:04
+ 关注

麻烦大佬们帮忙看一下错在哪了,用例通过率为 53.85%

#include<stdio.h>

int main(void)

{

long int n;

scanf("%ld",&n);

if(n==1) //处理只有一个数的特殊情况

{

printf("1");

exit(0);

}

long int a[n];

for(int i=0;i<n;i++)//将输入的数列存入数组a[]

{

scanf("%ld",&a[i]);

}

long int b[n-1]; //b数组用于记录a数组中相邻两个元素的相对大小关系

for(int i=0;i<n;i++)//之后考察b中元素时,只关心正负

{

b[i]=a[i+1]-a[i];

}

long int ans;

for(long int i=0;i<n-1;i++)

{

if(b[i]==b[i+1]&&b[i]==b[i+2])//处理一上来就遇到三个相等元素的情况

{ //这种情况,按照题意,结果为2

ans=2;

continue;

}

int flag=0;

long int cnt=0;

for(long int j=i;j<n-1;j++)

{

if(b[j]<=0) flag++;

if(flag==2) break; //flag=2,即b数组中出现了两个负数

cnt++; //即a数组中出现了先大再小再大再小的情况,

} /*此时可以终止此次遍历,因为到此为止已经无法满足

只改变一个元素就严格递增的要求了*/

cnt++; //cnt为本次遍历得到的最长子列的长度,cnt的值随着i的循环不断更新

ans=ans>cnt?ans:cnt;//还要和三个数相等的情况比较一下,确定最终结果

}

printf("%ld",ans);

return 0;

}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐