【洛谷题解】P1317【低洼地】

本文最后更新于:14 天前

看到好多dalao用什么山峰山谷除二啊,还有各种去重。

本蒟蒻一时间真的没看懂啊。。(My vegetable has exploded)

只好把我 看完题便无脑 写出来的代码放上来了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int nu[10521];
int main(void){
int n,i,ans = -1;//因为保证首尾都是0,所以-1

cin>>n;
for(i=0;i<n;i++)cin>>nu[i];//输入

for(i=1;i<n-1;i++)/*上面-1的原因,因为下面统计的是波峰=_=,波峰-1 = 波谷(具体证明就不放上来了)*/
if(nu[i-1]<nu[i]&&nu[i]>nu[i+1])ans++;
cout<<ans;
return 0;
}

!!当你把代码上交(submit)的时候,会惊讶的发现,居然只有80分

什么地方出了问题呢??

稍加思索……

让我们跑一下,以下数据:


8

0 5 2 3 3 1 5 0


1
2
3
4
5
6
7
8

* *
* *
* ** *
**** *
******
********
05233150

显而易见的两个低洼地,但是让我们瞅瞅输出:


1


哦,我的天啊,看看这个输出, 居然是一个“1”,这简直是上帝的不耻,耶稣的羞愧啊!!!

怎么会是“1”,哪里出了问题

首先,我们想想上面代码的原理

波谷数 = 山峰数-1

很明显,原理是没毛病的,那就可能是实现出了问题

思前向后,卡了223秒。

在统计山峰的时候,有部分譬如2331的平台山峰没有统计到

废话不多说,直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<string>
using namespace std;
int nu[10521];
int main(void){
int n,i,p,ans = -1;
cin>>n;
for(i=0;i<n;i++){
cin>>p;
if(i&&p==nu[i-1]){i--;n--;continue;}
nu[i] = p;
}/*输入时,删掉前后高度相同的,合并为一个山峰*/
for(i=1;i<n-1;i++)
if(nu[i-1]<nu[i]&&nu[i]>nu[i+1])ans++;
cout<<ans;
return 0;
}

蒟蒻第二篇题解


【洛谷题解】P1317【低洼地】
https://histone.top/2019/10/10bb2d7d/
作者
默子
发布于
2019年10月27日 11:08
许可协议