山峰和山谷 / GRZ-Ridges and Valleys

题目链接:ybt高效进阶1-5-2 / luogu P3456

题目大意

对于山谷和山峰,我们这样定义:
它们是一个连通块(其中的高度都相同),周围不是山峰或山谷但与山峰或山谷相邻的格子的高度均大于山谷的高度,或小于山峰的高度。

问你有多少个山谷和山峰。

思路

就直接 bfs。

找到一个连通块就跑一遍,然后对于不是这个连通块的就判断一下高度,就可以得出这是不是山谷或者山峰了。

有一点就是如果这个连通块周围都是边界,那这个连通块既是山谷,又是山峰。

而且相邻是八个位置,不是四个位置。

代码

#include<cstdio>using namespace std;int dx[8] = {1, 0, -1, 1, -1, 1, 0, -1}, dy[8] = {1, 1, 1, 0, 0, -1, -1, -1};
int n, a[1001][1001], high, low;
bool in[1001][1001], yesh, yesl;bool ch(int x, int y) {if (x < 1 || x > n) return 0;if (y < 1 || y > n) return 0;return 1;
}void dfs(int x, int y) {in[x][y] = 1;for (int i = 0; i < 8; i++)if (ch(x + dx[i], y + dy[i])) {if (!in[x + dx[i]][y + dy[i]] && a[x + dx[i]][y + dy[i]] == a[x][y]) {dfs(x + dx[i], y + dy[i]);}else if (a[x + dx[i]][y + dy[i]] != a[x][y]) {if (a[x + dx[i]][y + dy[i]] > a[x][y]) yesh = 0;else yesl = 0;}}
}int main() {scanf("%d", &n);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)scanf("%d", &a[i][j]);for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if (!in[i][j]) {yesh = yesl = 1;dfs(i, j);if (yesh) high++;if (yesl) low++;}printf("%d %d", high, low);return 0;
}

【ybt高效进阶1-5-2】【luogu P3456】山峰和山谷 / GRZ-Ridges and Valleys相关推荐

  1. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园

    公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...

  2. 【ybt高效进阶4-1-3】【luogu P5462】龙珠游戏 / X龙珠

    龙珠游戏 / X龙珠 题目链接:ybt高效进阶4-1-3 / luogu P5462 题目大意 有一个队列(里面的数互不相同),然后你每次可以取出相邻的两个数,按它们的前后顺序放到另一个队列中,最终所 ...

  3. 【YBT高效进阶】1基础算法/4深度优先搜索/2数独游戏

    [YBT高效进阶]1基础算法/4深度优先搜索/2数独游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 数独是一种传统益智游戏,你需要 ...

  4. 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)

    耗费体力 题目链接:ybt高效进阶5-6-3 题目大意 有一行树,树有高度,要从最左边跳到最右边,如果从高的树跳向低的就不需要花费体力,否则就要花费一点体力. 然后每次给你跳一次最远能跳的距离,问你最 ...

  5. YBT高效进阶 6.2.5 余数之和

    YBT高效进阶 6.2.5 余数之和 思路 (n,k)(n,k)(n,k) =∑i=1nkmodi=\sum_{i=1}^nk\bmod i=∑i=1n​kmodi =∑i=1nk−⌊ki⌋=\sum ...

  6. 【YBT高效进阶】1基础算法/1逆推算法/2奇怪汉诺塔

    [YBT高效进阶]1基础算法/1逆推算法/2奇怪汉诺塔 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 汉诺塔问题,条件如下: 这里有 ...

  7. 【ybt高效进阶 21161】复杂问题(图论)(分类讨论)(MIM / Meet In Middle)

    复杂问题 题目链接:ybt高效进阶 21161 题目大意 给你一个无向图,我们定义一个四元环为一个四个点的集合,这四个点(u,v,x,y)构成的子图,存在边 (u,v),(v,x),(x,y),(y, ...

  8. 【ybtoj高效进阶6-6-2】 期望分数/WJMZBMR打osu! / Easy 【luogu P1365】

    期望分数[ybtoj高效进阶6-6-2] WJMZBMR打osu! / Easy [luogu P1365] 题目描述: 给定一个长度为n的由 o,x,? 组成的字符串.计算分数的规则如下:连续 a ...

  9. 【ybtoj 高效进阶 3.1】 【并查集】 逐个击破

    [ybtoj 高效进阶 3.1] [并查集] 逐个击破 题目 解题思路 换一个思路 求出保留的边 用总边权减去保留的 能被保留下来的边的两个端点不能都被k军团占领 我们要做的就是维护每个连通块 有被占 ...

最新文章

  1. phpMyAdmin FTP iptables Selinux
  2. ExpandableListView(一)替换系统默认的箭头
  3. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
  4. ie8下修改input的type属性报错
  5. JavaApplet 绘制火柴棒和轮播图片
  6. 面试准备每日系列:Java底层源码——Arrays.toString(数组) object.toString() new String()
  7. linux上如何查看具体的命令属于哪个安装包
  8. leetcode945. Minimum Increment to Make Array Unique
  9. Oracle 自动诊断信息库(Automatic Diagnostic Repository,ADR)
  10. python吧_如何自学Python?【python吧】
  11. oracle删除表空间和修改索引表空间
  12. CSS图片上面放文字实现方式
  13. 教你快速分析大量圆通快递单号中揽收后没有物流的
  14. 【Arduino】坐姿检测器
  15. 云呐|仓库RFID固定资产盘点软件有哪些优势
  16. 浏览器上检测电脑是否安装某个应用程序
  17. kubernetes pod-name生成过程 源码分析
  18. 【调剂】211北京邮电大学2020年软件学院硕士研究生招生缺额信息
  19. 基于STM32单片机流水灯仿真与程序设计
  20. 虚拟局域网——vlan

热门文章

  1. python标准库:fractions有理数
  2. 支持3d android 模拟器,3D太空模拟器
  3. docker exec -it container1 /bin/bash 异常
  4. CANopen--基于DS402协议的伺服电机原点回零模式
  5. 【网站】数字滚动效果的实现方法
  6. 数据挖掘总结之消极学习与积极学习
  7. oCPC实践录 | 广告冷启动问题的思考与总结
  8. clipboard.js
  9. flv视频播放器 自动循环播放代码
  10. android studio开发十一 Library第三方类库源码, Jar包和SO库