Jojo和他的朋友列出了山脉上的N个地点。
(有一个专业的登山者小组将山脉分为N个战略要点)
如果有人想爬这个山脉,它总是从第一点开始。我们可以说“爬上去”
如果我们从较低的高度点转到较高的高度,否则“爬下”。
Jojo和他的朋友们想让您找到将K精确爬升到M精确爬升的范围吗?
输入包含一个整数T,即测试用例的数量。对于每个测试用例,它包含3个整数N,K,M-此次探险的山脉点数,“爬升”数量和“爬升”数量。下一行包含N个整数Ai-山脉上每个点的高度。
输出应以“ Case #X:Y”格式表示-X是测试用例的编号,
然后是Y-满足上述条件的范围的最小长度。
我写了一个代码
我的示例代码如下
#include <stdio.h>
int main(){
int T;
scanf("%d",&T);
for(int i=0;i<T;i++){
int N,K,M;
scanf("%d %d %d",&N,&K,&M);
int alt [N];
for(int i=0;i<N;i++){
scanf("%d",&alt[i]);
}
int ans = 2147483647;
for(int i=0;i<N;i++){
int up=0,down=0,range=0;
for(int j=i+1;j<N;j++){
if(alt[j]>alt[j-1]){
up++;
range++;
}
else{
down++;
range++;
}
if(up==K && down==M && range<ans){
ans = range+1;
break;
}
else if(up>K || down>M){
break;
}
}
}
if(ans==2147483647){
ans = -1;
}
printf("Case #%d: %d \n",i+1,ans);
}
return 0;
}
所以请帮我解决“我可以优化该代码吗?”这个问题