题目

这题挺简单的,没必要用数组

【分析】

需要判断的是低洼地的数量

通过对题目中图进行分析,显然可以发现低洼地的定义:

若数组中存在一个数值相同的连续区间,这个区间端点外相邻两点的数值都大于该区间的数值,则该区间为低洼地

有的朋友也许会觉得这个定义很麻烦,但有时候,定义是必须的

比如这题,如果单纯地将低洼地理解为中间都比周围低,那么对于这组数据:

3 2 1 2 1 2 3

就会被视为一个低洼地,而不是两个了

我们回来。可以发现,对于 一个数值相同的区间 显得有些无趣,毕竟我们不需要知道区间长度,只需要这个区间的数值

所以,对于相同的相邻读入,可以直接存为一个

这样,我们对于我们储存的数据,低洼地的定义就不同了:

若数组中存在一个数,它既小于它的前一个数,又小于它后一个数,则这个数是低洼地

我们需要的是低洼地的数量,所以一边读入,一边处理即可

具体细节可以参考本蒟蒻的代码

还有一个细节,第一个点和最后一个点一定不是低洼地,可以考虑初始化为上坡,这个可以在本蒟蒻的代码中体现


【代码】

那本蒟蒻就放 我码风极丑的 代码了

#include<cstdio>
using namespace std;
int main(){
int d_T,d_F=-2,d_M=-1,d_L,d_Cnt=0;
/*
d_T:数据组数
d_F:当前数的前一个数
d_M:当前数
d_L:当前数的后一个数
d_Cnt:低洼地的数量
因为高度保证>=0,初始化为(-2),(-1) 能保证一定是上坡
*/
scanf("%d",&d_T);
while(d_T--){
scanf("%d",&d_L);
if(d_L==d_M) continue;
//数值相同,不需要新存
if(d_M<d_F&&d_M<d_L) d_Cnt++;
//判断是否是低洼地,是的话记录
d_F=d_M;
d_M=d_L;
//更新
}
printf("%d",d_Cnt);
return 0;
}

想学读入优化和输出优化的朋友,这里也给出代码,但是对这题没有什么影响

#include<cstdio>
using namespace std;
#define f(a,b,c,d) for(register int a=b,c=d;a<=c;a++)
#define g(a,b,c,d) for(register int a=b,c=d;a>=c;a--)
typedef int i32;
typedef unsigned int u32;
typedef long long int i64;
typedef unsigned long long int u64;
namespace IO{
//#define LOCAL
#ifdef LOCAL
inline char gc() { return getchar(); }
#else
inline char gc(){
static char s[1<<20|1]={0},*p1=s,*p2=s;
return (p1==p2)&&(p2=(p1=s)+fread(s,1,1<<20,stdin),p1==p2)?EOF:*(p1++);
}
#endif
inline i64 read(){
register i64 ans=0;register char c=gc();register bool neg=0;
while(c<48||c>57) neg^=!(c^45),c=gc();
while(c>=48&&c<=57) ans=(ans<<3)+(ans<<1)+(c^48),c=gc();
return neg?-ans:ans;
}
char Output_Ans[1<<20|1],*Output_Cur=Output_Ans;
inline void output() { Output_Cur-=fwrite(Output_Ans,1,Output_Cur-Output_Ans,stdout); }
inline void print(char c){
if(Output_Cur-Output_Ans+1>>20) output();
*(Output_Cur++)=c;
}
inline void print(i64 ans){
register char buf[20]={0};
if(Output_Cur-Output_Ans+sprintf(buf,"%lld",ans)>>20) output();
Output_Cur+=sprintf(Output_Cur,"%lld",ans);
}
inline void print(i32 ans) { print(0ll|ans); }
inline void print(u64 ans){
register char buf[20]={0};
if(Output_Cur-Output_Ans+sprintf(buf,"%llu",ans)>>20) output();
Output_Cur+=sprintf(Output_Cur,"%llu",ans);
}
inline void print(u32 ans) { print(0ull|ans); }
}
using namespace IO;
int main(){
register i32 d_T=read(),d_F=-2,d_M=-1,d_L,d_Cnt=0;
while(d_T--){
d_L=read();
if(d_L==d_M) continue;
if(d_M<d_F&&d_M<d_L) d_Cnt++;
d_F=d_M;
d_M=d_L;
}
print(d_Cnt);
output();
return 0;
}

最后安利一下 本蒟蒻的博客

题解 P1317 【低洼地】的更多相关文章

  1. [洛谷P1317]低洼地

    题目大意:一组数,分别表示地平线的高度变化.高度值为整数,相邻高度用直线连接.找出并统计有多少个可能积水的低洼地?(首尾都为0) 题解:求出其中都多少个不严格下降子段和不严格上升子段所夹的位置,即为答 ...

  2. 强大的unique

    强大的unique 两道红题为例眼熟一下unique P1138 第k小整数 题解 这里用到了STL的去重函数哦 unique 首先你有一个待处理的数组 a[n] 一定要先排序鸭  sort( a+1 ...

  3. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  4. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  7. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  8. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. 图片与byte相互转换

    一.图片转byte public byte[] ImageToByte() { string imagefile = @"http://192.168.0.212/pass/T-1.jpg& ...

  2. putty Linux 自动补全

    用putty连接Ubuntu16.04后,输入命令后按tab键,不自动补全,对上下键无历史命令,$符号顶格显示,无用户名.主机名, 这是由于默认用的sh,可以直接调用bash,进入bash:

  3. ACM-吴奶奶买鱼

    题目描述:吴奶奶买鱼   吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼.为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼.这个市场可真大,里面有各种各样的宠物,就连宠物鱼都 ...

  4. 从零到Django大牛的的进阶之路01

    搭建 创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 安装Django pip install django==1.11.11 创建工程 django-a ...

  5. exec()函数问题

    源代码: 在网上也搜索了答案 比较详细的答案是: <?php exec("lsof -i:80",$out,$status); 结果: var_dump($out); arr ...

  6. 114-PHP判断类变量是否相同

    <?php class ren{ //定义人类 } class mao{ //定义人类 } $ren=new ren(); //实例化人类的对象 $ren_a=new ren(); //实例化人 ...

  7. excel处理经纬度

    =LEFT(A1,FIND("°",A1)-1)*1+MID(A1,FIND("°",A1)+1,2)/60+MID(A1,FIND("′" ...

  8. 简单javascript学习总结

    2019-10-19 //文章汇总于绿叶学习网 console.log()                              //控制台输出 目录 数据类型:.... 2 函数:.... 3 ...

  9. 《thinkphp》二、创建实例

    1.目录结构 project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更改) │ ├─index 模块目录(可更改) │ │ ├─confi ...

  10. 吴裕雄--天生自然C++语言学习笔记:C++ 重载运算符和重载函数

    C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不 ...