(本人本题完成于2016-7-22)
题目:花匠-题目
以下是本人代码:
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n,h[100010]={0};
int p,ans=0,maxans=0; //p代表前面的数列的状态,p=0时代表数列在递增,p=1时代表数列在递减
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
p=0;
for(int i=1;i<n;i++)
{
if (!p&&h[i]>h[i+1]) {ans++;p=1-p;}
if (p&&h[i]<h[i+1]) {ans++;p=1-p;} //当状态改变时,增加转折点的数量
} //找转折点
maxans=ans;
ans=0;
p=1;
for(int i=1;i<n;i++)
{
if (!p&&h[i]>h[i+1]) {ans++;p=1-p;}
if (p&&h[i]<h[i+1]) {ans++;p=1-p;}
} //改变初始状态再找一遍
maxans=max(ans,maxans);
printf("%d",maxans+1); //注意:答案还要再加上1
return 0;
}