题解【洛谷P3456】[POI2007]GRZ-Ridges and Valleys
考虑 \(\text{Flood Fill}\)。
每次在 \(\text{BFS}\) 扩展的过程中增加几个判断条件,记录山峰和山谷的个数即可。
#include <bits/stdc++.h>
using namespace std;
int n, m, w[1003][1003], c1, c2;
bool st[1003][1003];
pair <int, int> q[1001 * 1001];
int hh, tt;
inline void bfs(int x, int y, bool &has_t, bool &has_l)
{
hh = tt = 0;
q[0] = (make_pair)(x, y); //队列初始化
st[x][y] = true; //标记已访问
while (hh <= tt) //队列不为空
{
pair <int, int> u = q[hh++]; //取出队头元素
for (int i = u.first - 1; i <= u.first + 1; i+=1)
for (int j = u.second - 1; j <= u.second + 1; j+=1) //向周围 8 个方向扩展
{
if (i < 1 || i > n || j < 1 || j > n) continue;
if (w[i][j] > w[u.first][u.second])
has_t = true; //周围的高度有比它高的
else if (w[i][j] < w[u.first][u.second])
has_l = true; //周围的高度有比它矮的
else if (!st[i][j]) //高度相等且没有被标记访问过
st[i][j] = true, q[++tt] = (make_pair)(i, j); //标记已访问,并加入队列
}
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i+=1)
for (int j = 1; j <= n; j+=1)
cin >> w[i][j];
for (int i = 1; i <= n; i+=1)
for (int j = 1; j <= n; j+=1) //枚举每个点
if (!st[i][j]) //当前点没有被标记
{
bool has_t = false, has_l = false;
//标记周围有没有 比它高的 和 比它矮的
bfs(i, j, has_t, has_l); //BFS 扩展
if (!has_t) ++c1; //周围没有比它高的就是山峰
if (!has_l) ++c2; //周围没有比它矮的就是山谷
}
cout << c1 << ' ' << c2 << endl; //输出山峰和山谷个数
return 0;
}
题解【洛谷P3456】[POI2007]GRZ-Ridges and Valleys的更多相关文章
- 洛谷 P3456 [POI2007]GRZ-Ridges and Valleys
P3456 [POI2007]GRZ-Ridges and Valleys 题意翻译 给定一个地图,为小朋友想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两 ...
- [洛谷P3460] [POI2007]TET-Tetris Attack
洛谷题目链接:[POI2007]TET-Tetris Attack 题目描述 A puzzle called "Tetris Attack" has lately become a ...
- [洛谷3457][POI2007]POW-The Flood
洛谷题目链接:[POI2007]POW-The Flood 题意翻译 Description 你手头有一张该市的地图.这张地图是边长为 m∗n 的矩形,被划分为m∗n个1∗1的小正方形.对于每个小正方 ...
- 题解 洛谷P5018【对称二叉树】(noip2018T4)
\(noip2018\) \(T4\)题解 其实呢,我是觉得这题比\(T3\)水到不知道哪里去了 毕竟我比较菜,不大会\(dp\) 好了开始讲正事 这题其实考察的其实就是选手对D(大)F(法)S(师) ...
- 题解 洛谷 P3396 【哈希冲突】(根号分治)
根号分治 前言 本题是一道讲解根号分治思想的论文题(然鹅我并没有找到论文),正 如论文中所说,根号算法--不仅是分块,根号分治利用的思想和分块像 似却又不同,某一篇洛谷日报中说过,分块算法实质上是一种 ...
- 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)
题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...
- 题解-洛谷P4229 某位歌姬的故事
题面 洛谷P4229 某位歌姬的故事 \(T\) 组测试数据.有 \(n\) 个音节,每个音节 \(h_i\in[1,A]\),还有 \(m\) 个限制 \((l_i,r_i,g_i)\) 表示 \( ...
- 题解-洛谷P4724 【模板】三维凸包
洛谷P4724 [模板]三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积. 数据范围:\(1\le n\le 2000\). 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积 ...
- 题解-洛谷P4859 已经没有什么好害怕的了
洛谷P4859 已经没有什么好害怕的了 给定 \(n\) 和 \(k\),\(n\) 个糖果能量 \(a_i\) 和 \(n\) 个药片能量 \(b_i\),每个 \(a_i\) 和 \(b_i\) ...
- 题解-洛谷P5217 贫穷
洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...
随机推荐
- centos7 上为php-fpm安装gd扩展库
转自:https://blog.csdn.net/liyyzz33/article/details/89166110 首先查看自己当前php的版本 php -v PHP 5.6.40 查看yum中是否 ...
- C++ 基础--虚构函数
virtual 函数 示例代码如下: #include <stdio.h> class base { public: virtual void name(){printf("ba ...
- k8s系列---service
来源 : http://blog.itpub.net/28916011/viewspace-2214745/ service是要通过coreDNS来管理pod的. kube-proxy始终监视着api ...
- ES6学习笔记(一):轻松搞懂面向对象编程、类和对象
目录 面向过程编程P OP(Process oriented programming) 面向对象编程OOP(Object Oriented Programming) 总结 @ 面向过程编程P OP(P ...
- codewars--js--ten minutes walk
题目: You live in the city of Cartesia where all roads are laid out in a perfect grid. You arrived ten ...
- 在NBA我需要翻译 适配器模式
17.1 在NBA我需要翻译! 17.2 适配器模式 Adapter,将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作, 有些国家 ...
- RocketMQ幂等性问题
什么是幂等性: 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系 ...
- 8maven配置多个项目之间的依赖
首先创建两个项目进行测试依赖 创建一个HelloWorld2项目,一个HelloWorld类里面有一个sayHello的方法 然后再创建一个HelloWorldTime项目,一个SayHelloWor ...
- import,export深入理解
export 最正常: var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958; export { firstName ...
- P3902 递增
链接:P3902 ----------------------------------------- 这道题就是最长上升子序列的模板题,因为我们修改的时候可没说不能改成小数(暴力) --------- ...