关于我的代码的任何建议时限判决

时间:2020-01-22 05:51:35

标签: c optimization

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;
}

所以请帮我解决“我可以优化该代码吗?”这个问题

0 个答案:

没有答案