WZK旅游
来源:互联网 发布:在线查重软件 编辑:程序博客网 时间:2024/04/29 00:15
题目描述
【题目背景】
WZK喜欢旅游,因此,WZK去过很多很多美丽的地方,西双版纳,大理,九寨沟,黄龙,张家界,天涯海角„„
WZK发现,旅游景点普遍都有山水,山水萦绕,或朦胧悠远,或壮丽秀美,山水交织,总能有一翻绝伦的景致的!
不过WZK也发现,在这个虚假宣传泛滥的年代„„很多地方并不是像宣传画上说的那么漂亮的——比如——我可以把常州的横山说的像雁荡山那么漂亮——不过你到了之后才发现不过一座小山(当然,说小土坡WZK也不反对)——哪里能和祖国东南丘陵的大好山川相媲美呢?
好在,WZK知道如何利用Google Map对景点进行测试!Google Map是Google Web2.0的经典应用,有的时候,你甚至可以在Google Map上找到你的家的位置 。不过——不管怎么精确的卫星——毕竟没军用的那么强大,精确度总是有缺陷的——但至少,告诉你一个小的矩形区域的高度还是没有问题的——如果把目标区域划分成N*M的小区域,那么你可以知道每个小区域的高度。
不过„„由于景点的区域实在太大了,WZK对于google Map提供的硕大的地图感到很头疼,你能帮他么?
他需要你找出地图中所有的山峰了,湖泊。
WZK对湖泊和山峰的定义是这样的:
众所周知,水往低处流,WZK心中的湖泊还是一平如镜的,因此湖泊必然是一块连通的并且高度都相同区域,并且,这个区域的高度比其周围部分的高度都要低。
山峰的定义也是类似,WZK认为山峰一定是最高的,因此山峰必然是是一块连通的并且高度都相同区域,并且,这个区域的高度比其周围部分的高度都要高。
这里的周围指的是有边相邻的格子(对角的格子不算)。
WZK希望知道湖泊和山峰的个数,以便于对这个景点的优美程度进行估价。
显然一块大平地不会成为景点——因此不会出现每个小区域高度都相同的情况的。
好了现在轮到你了。
【问题描述】
给出N*M格的每格的高度信息,求出湖泊个数和山峰个数。
输入
第一行两个整数N,M。
接着N行,每行有M个数字,表示高度信息,之间用一个空格隔开。
输出
输出一行两个整数,分别表示湖泊个数和山峰个数,之间用一个空格隔开。
思路
广搜遍历每一个相同的数的点,判断上下左右四个方向的状态记录下来,如果只有大于或小于的话就累加
const dx:array[1..4] of integer=(1,0,-1,0); dy:array[1..4] of integer=(0,1,0,-1);var a:array[-10..2001,-10..2001] of longint; f:array[-10..2001,-10..2001] of boolean; sx,sy:array[0..1000000] of longint; i,j,k,n,m,s,x,y,u,d,l,r:longint; up,down:boolean;procedure bfs;var head,tail,i,j,k:longint;begin head:=0; tail:=1;sx[1]:=l; sy[1]:=r; while (head<tail) do begin inc(head); for i:=1 to 4 do if (sx[head]+dx[i]>=1) and (sx[head]+dx[i]<=n) and (sy[head]+dy[i]>=1) and (sy[head]+dy[i]<=m) then begin if a[sx[head]+dx[i],sy[head]+dy[i]]<a[sx[head],sy[head]] then down:=true else if a[sx[head]+dx[i],sy[head]+dy[i]]>a[sx[head],sy[head]] then up:=true; end; for i:=1 to 4 do if (sx[head]+dx[i]>=1) and (sx[head]+dx[i]<=n) and (sy[head]+dy[i]>=1) and (sy[head]+dy[i]<=m) and (not f[sx[head]+dx[i],sy[head]+dy[i]]) and (a[sx[head]+dx[i],sy[head]+dy[i]]=a[sx[head],sy[head]]) then begin inc(tail); sx[tail]:=sx[head]+dx[i]; sy[tail]:=sy[head]+dy[i]; f[sx[tail],sy[tail]]:=true; end end;end;begin assign(input,'seek.in'); reset(input); assign(output,'seek.out'); rewrite(output); readln(n,m); for i:=1 to n do begin for j:=1 to m do read(a[i,j]); readln; end; for i:=1 to n do for j:=1 to m do begin up:=false; down:=false; if not f[i,j] then begin f[i,j]:=true; l:=i; r:=j; bfs; end; if (up) and (not down) then inc(u) else if (down) and (not up) then inc(d); end; writeln(u,' ',d);end.
- WZK旅游
- 初中OJ1996【2015.8.3普及组模拟赛】WZK旅游(seek)
- 饥饿的WZK
- 旅游
- 旅游
- 旅游~~
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 旅游
- 计划旅游,合理旅游
- 旅游整理
- svn提交代码提示 is not a working copy
- android水波纹样式的小球View
- 求1+2+3+...+n
- android判题自定义view
- 反射
- WZK旅游
- Intent
- bean的上下文和bean工厂以及生命周期
- 不用加减乘除做加法
- 把字符串转换成整数
- 习题13
- Spark数据倾斜解决原理和方法总论
- 动态规划的一些程序
- BZOJ 1013 [JSOI2008]球形空间产生器sphere