题目链接

(1)读题

将题目要求转化为有好几座山,对于每座山,ans+=(最高高度-最低高度),最终结果就是答案。

 

 

 

(2)做题

此题调试十分困难。

正解

#include<cstdio>
#include<iostream>
using namespace std;
int a[200000];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    if(n==1){
        printf("%d\n",a[1]);
        return 0;
    }
    int ans=0;
    int tmpMax=-1;//当前山峰
    int tmpMin=0;
    bool isDowning=false;//是否在下降 
    for(int i=1;i<=n;i++){//枚举每个位置 
        int nowVal=a[i];
        if(nowVal>tmpMax){//即将上升 
            tmpMax=nowVal;
            if(i==n){//结束 
                ans+=tmpMax-tmpMin;
            }
        }else{//下降时的处理 
            isDowning=true;
            if(i==n){
                ans+=tmpMax-tmpMin;
                break;
            }
            if(n>i&&a[i+1]>a[i]){//即将进入另一座山 
            //如果之前在下降,回退,将这段区间的价值计入答案 
                ans+=(tmpMax-tmpMin);
                //回归初始值
                tmpMin=a[i]; 
                tmpMax=a[i+1];
                if(i+1==n){
                    ans+=a[i+1]-a[i];
                    break;
                }
                isDowning=false;
                continue;
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}
View Code

对拍

#include <iostream>   
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <ctime>  
#include <fstream>  
#include <algorithm>  
#include <windows.h>  
using namespace std;  
//ofstream cout("data.in");  
int main()  
{  
    srand(time(0));  
//  srand( (unsigned)time( NULL ) );  
    //freopen("4.in","w",stdout);   
    int n=rand()%100000+1;
    printf("%d\n",n);
    for(int i=1;i<=n;i++){
        printf("%d ",rand()%1000+1);
    }
    printf("\n");
    return 0;  
} 
View Code

正解(递推)(题解

#include<cstdio>
#include<iostream>
using namespace std;
int a[200000];
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    int ans=0;
    for(int i=1;i<=n;i++){
        if(a[i]>a[i-1]){
            ans+=a[i]-a[i-1];
        }
    }
    printf("%d\n",ans); 
    return 0;
}
View Code

对拍.bat

:again  
data > input.txt  
AC < input.txt > biaoda_output.txt  
qwq < input.txt > test_output.txt  
fc biaoda_output.txt test_output.txt  
if not errorlevel 1 goto again  
pause