测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A20827. 山之谷

填空题 较难

题目描述

山之谷

题目描述

现有一片山地,可以视为一个N行M列的网格图,第i行j列的海拔为hi,j

如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多8个方向)的海拔,则称该单元格为山谷。

请你数一数该片山地中有多少山谷。

输入格式

第一行包含2个整数N,M,表示山地的大小。

之后N行,每行包含M个整数hi,1,hi,2,...,hi,M,表示海拔。

输出格式

输出1行,包含1个整数C,表示山谷的数量。

样例

输入样例

3 5
7 6 6 7 9
6 5 6 7 6
6 5 7 8 9

输出样例

3

样例解释

样例 1 如图所示,绿色单元格代表山谷:

数据范围

保证1≤N,M≤100,1≤hi,j≤105


参考答案

#include <iostream> using namespace std; int main() { int n, m; int h[105][105]; cin >> n >> m; for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> h[i][j]; for(int i = 0; i <= max(n, m) + 1; i++) h[i][0] = h[0][i] = h[i][m + 1] = h[n + 1][i] = 1e9; int ans = 0; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { bool ok = true; for(int i2 = i - 1; i2 <= i + 1; i2++) for(int j2 = j - 1; j2 <= j + 1; j2++) if(h[i][j] > h[i2][j2]) { ok = false; break; } ans += ok; } } cout << ans; return 0; }
上一题 下一题