博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ] 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
阅读量:5094 次
发布时间:2019-06-13

本文共 3911 字,大约阅读时间需要 13 分钟。

1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 947  Solved: 425
[][][]

Description

The farm has many hills upon which Farmer John would like to place guards to ensure the safety of his valuable milk-cows. He wonders how many guards he will need if he wishes to put one on top of each hill. He has a map supplied as a matrix of integers; the matrix has N (1 < N <= 700) rows and M (1 < M <= 700) columns. Each member of the matrix is an altitude H_ij (0 <= H_ij <= 10,000). Help him determine the number of hilltops on the map. A hilltop is one or more adjacent matrix elements of the same value surrounded exclusively by either the edge of the map or elements with a lower (smaller) altitude. Two different elements are adjacent if the magnitude of difference in their X coordinates is no greater than 1 and the magnitude of differences in their Y coordinates is also no greater than 1.

 

农夫JOHN的农夫上有很多小山丘,他想要在那里布置一些保镖(……)去保卫他的那些相当值钱的奶牛们。 他想知道如果在一座小山丘上布置一名保镖的话,他总共需要招聘多少名保镖。他现在手头有一个用数字矩阵来表示地形的地图。这个矩阵有N行(1 < N < = 100)和M列( 1 < M < = 70) 。矩阵中的每个元素都有一个值H_ij(0 < = H_ij < =10,000)来表示该地区的海拔高度。请你帮助他统计出地图上到底有多少个小山丘。 小山丘的定义是:若地图中一个元素所邻接的所有元素都比这个元素高度要小(或它邻接的是地图的边界),则该元素和其周围所有按照这样顺序排列的元素的集合称为一个小山丘。这里邻接的意义是:若一个元素与另一个横坐标纵坐标和它的横纵坐标相差不超过1,则称这两个元素邻接。 问题名称:guard 输入格式: 第一行:两个由空格隔开的整数N和M 第二行到第N+1行:第I+1行描述了地图上的第I行,有M个由空格隔开的整数:H_ij. 输入样例:(guard.in): 8 7 4 3 2 2 1 0 1 3 3 3 2 1 0 1 2 2 2 2 1 0 0 2 1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 0 1 2 2 1 1 0 0 1 1 1 2 1 0 输出格式: 第一行:小山丘的个数 输出样例:(guard.out): 3 输出样例解释: 地图上有三个小山丘:每个小山丘的山峰位置分别在左上角(高度为4),右上角(高度为1)和底部(高度为2)。

Input

* Line 1: Two space-separated integers: N and M

* Lines 2..N+1: Line i+1 describes row i of the matrix with M space-separated integers: H_ij

Output

* Line 1: A single integer that specifies the number of hilltops

Sample Input

8 7
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0

Sample Output

3

HINT

   三个山丘分别是:左上角的高度为4的方格,右上角的高度为1的方格,还有最后一行中高度为2的方格.

Source

 

Analysis

灌水,,,我是不是直接开个列表就行了?

 

Code

1 #include
2 #include
3 using namespace std; 4 5 const int dir[8][2] = {
{
1,0},{
0,1},{-1,0},{
0,-1},{
1,1},{
1,-1},{-1,1},{-1,-1}}; 6 7 int n,m,ans; 8 bool SPLASH[3000][3000],vis[3000][3000]; 9 int map[3000][3000];10 11 bool Judge(int x,int y,int nowx,int nowy,int high){12 if(x < 1 || x > n || y < 1 || y > m || SPLASH[x][y]) return false;13 if(high == map[nowx][nowy]) return map[x][y] < map[nowx][nowy];14 else return map[x][y] <= map[nowx][nowy];15 }16 17 void flood(int nowx,int nowy,int high){18 for(int i = 0;i < 8;i++){19 int x = nowx+dir[i][0];20 int y = nowy+dir[i][1];21 if(Judge(x,y,nowx,nowy,high)){22 SPLASH[x][y] = true;23 flood(x,y,high);24 }25 }26 }27 28 void flood2(int nowx,int nowy){29 for(int i = 0;i < 8;i++){30 int x = nowx+dir[i][0];31 int y = nowy+dir[i][1];32 if(x >= 1 && x <= n && y >= 1 && y <= m && !SPLASH[x][y]){33 SPLASH[x][y] = true;34 flood2(x,y);35 }36 }37 }38 39 int main(){40 scanf("%d%d",&n,&m);41 42 for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++)43 cin >> map[i][j];44 45 for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++){46 flood(i,j,map[i][j]);47 }48 49 for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++)50 if(!SPLASH[i][j]){ans++,flood2(i,j);}51 52 // for(int i = 1;i <= n;i++){53 // for(int j = 1;j <= m;j++)54 // printf("%d ",SPLASH[i][j]?1:0);55 // cout << endl;56 // }57 // 58 // for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++)59 // if(!SPLASH[i][j]) ans++;60 // 61 printf("%d",ans);62 63 return 0;64 }
qwq

 

转载于:https://www.cnblogs.com/Chorolop/p/7616776.html

你可能感兴趣的文章
Window7上搭建symfony开发环境(PEAR)
查看>>
ResolveUrl的用法
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3
查看>>
在你自己的时区里,一切安排都准时!
查看>>
软件测试技术- 自动贩卖机-因果图&决策图
查看>>
CSS3 Box-sizing
查看>>
并发编程:守护进程、互斥锁、案例、进程间通讯
查看>>
如何使带背景图片的Button按钮中的文字居中偏上显示
查看>>
memcache、redis、mongoDB 如何选择?
查看>>
JS同源策略和跨域访问
查看>>
正则 去除html标签
查看>>
FZU 1889 龟兔赛跑
查看>>
java基础-Comparator接口与Collections实现排序算法
查看>>
ddrmenu
查看>>
华为离职副总裁徐家骏:年薪千万的工作感悟
查看>>
java SE :标准输入/输出
查看>>
vs 打开项目时要建配置文件的解决办法
查看>>
sublimie 知乎
查看>>