(无视掉下面的提示(〜 ̄△ ̄)〜)
首先判断我们低洼地有两种情况
第一种:只有一个点的低洼地,比如:
第二种,有多个点的洼地:
第一种情况的判断十分简单,只需要判断现在的点的两边是否高于现有的点
if(a[i-1]>a[i]&&a[i+1]>a[i])
{
ans++;
continue;
第二种情况稍微有点复杂,应为他可以有很多情况:比如
或者
其实我们只要以当前i为开头,不断遍历, 当找到一个点比当前点高,就直接ans加1,然后以遍历到的地方作为i的新起点。
上代码(⌒▽⌒)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];//输入
}
int ans=0;
for(int i=1;i<n-1;i++)
{
if(a[i-1]>a[i]&&a[i+1]>a[i])//判断低洼地类型
{
ans++;
continue;
}
if(a[i-1]>a[i]&&a[i+1]==a[i])//判断低洼地类型
{
for(int j=i;j<n-1;j++)//循环找出洼地的尽头,并把i重新定义为新的地点,避免重复计算洼地
{
if(a[j]>a[i])
{
i=j;
ans++;
break;
}
}
}
}
cout<<ans;//输出
return 0;
}
13岁萌新,求点赞
(都是我自己写的( ̄へ ̄))