2026年3月GESP真题及题解(C++四级):山之谷

四季读书网 4 0
2026年3月GESP真题及题解(C++四级):山之谷

2026年3月GESP真题及题解(C++四级):山之谷

2026年3月GESP真题及题解(C++四级):山之谷-第1张图片-四季读书网

题目描述

现有一片山地,可以视为一个 2026年3月GESP真题及题解(C++四级):山之谷-第2张图片-四季读书网 行 2026年3月GESP真题及题解(C++四级):山之谷-第3张图片-四季读书网 列的网格图,第 2026年3月GESP真题及题解(C++四级):山之谷-第4张图片-四季读书网 行 2026年3月GESP真题及题解(C++四级):山之谷-第5张图片-四季读书网 列的海拔为 2026年3月GESP真题及题解(C++四级):山之谷-第6张图片-四季读书网

如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多 2026年3月GESP真题及题解(C++四级):山之谷-第7张图片-四季读书网 个方向)的海拔,则称该单元格为山谷。

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

输入格式

第一行包含 2026年3月GESP真题及题解(C++四级):山之谷-第8张图片-四季读书网 个整数 2026年3月GESP真题及题解(C++四级):山之谷-第9张图片-四季读书网,表示山地的大小。

之后 2026年3月GESP真题及题解(C++四级):山之谷-第10张图片-四季读书网 行,每行包含 2026年3月GESP真题及题解(C++四级):山之谷-第11张图片-四季读书网 个整数 2026年3月GESP真题及题解(C++四级):山之谷-第12张图片-四季读书网,表示海拔。

输出格式

输出 2026年3月GESP真题及题解(C++四级):山之谷-第13张图片-四季读书网 行,包含 2026年3月GESP真题及题解(C++四级):山之谷-第14张图片-四季读书网 个整数 2026年3月GESP真题及题解(C++四级):山之谷-第15张图片-四季读书网,表示山谷的数量。

输入输出样例 #1

输入 #1
3 57 6 6 7 96 5 6 7 66 5 7 8 9
输出 #1
3

说明/提示

样例解释

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

2026年3月GESP真题及题解(C++四级):山之谷-第16张图片-四季读书网

数据范围

保证 2026年3月GESP真题及题解(C++四级):山之谷-第17张图片-四季读书网2026年3月GESP真题及题解(C++四级):山之谷-第18张图片-四季读书网

思路分析

算法思路

  1. 读入网格行数 n、列数 m 及海拔数据 h
  2. 定义方向数组 dx 和 dy,分别表示八个方向的行列偏移量。
  3. 对于每一个单元格 (i, j),调用 check(i, j) 函数: 
    • 遍历八个方向,计算相邻单元格坐标 (nx, ny)
    • 如果相邻坐标在网格范围内,且当前单元格海拔 h[i][j]大于该相邻单元格海拔,则说明当前单元格不是山谷,返回 false
    • 如果所有合法邻居都不满足 h[i][j] > h[nx][ny],则当前单元格是山谷,返回 true
  4. 统计所有返回 true 的单元格数量,输出结果。

关键点

  • 只考虑实际存在的邻居(通过边界判断 nx>=1 && nx<=n && ny>=1 && ny<=m

代码实现

#include<bits/stdc++.h>using namespace std;int n, m;               // 网格行数、列数int h[110][110];        // 海拔数组,下标从1开始int cnt = 0;            // 山谷计数器// 八个方向的行列偏移量 (顺序: 左上、上、右上、右、右下、下、左下、左)int dx[8] = {-1-1-101110};int dy[8] = {-101110-1-1};// 检查单元格 (x, y) 是否为山谷boolcheck(int x, int y){    for (int i = 0; i < 8; i++) {          // 遍历八个方向        int nx = x + dx[i];                 // 邻居行坐标        int ny = y + dy[i];                 // 邻居列坐标        // 判断邻居是否在网格内        if (nx >= 1 && nx <= n && ny >= 1 && ny <= m) {            // 如果当前海拔 > 邻居海拔,则不满足山谷条件            if (h[x][y] > h[nx][ny]) return false;        }    }    // 所有合法邻居都不高于当前单元格,则当前是山谷    return true;}intmain(){    // 读入网格大小    cin >> n >> m;    // 读入海拔数据    for (int i = 1; i <= n; i++) {        for (int j = 1; j <= m; j++) {            cin >> h[i][j];        }    }    // 遍历每个单元格,统计山谷个数    for (int i = 1; i <= n; i++) {        for (int j = 1; j <= m; j++) {            if (check(i, j)) cnt++;        }    }    // 输出结果    cout << cnt;    return 0;}

功能分析

  1. 正确性
    • 严格按照题目定义:每个单元格需检查所有八个方向(边界处忽略不存在的邻居),只要存在一个海拔更低的邻居,即判定为非山谷。
    • 对于等高的情况,代码判定为山谷,符合“不高于”的要求。
    • 边界处理:通过 if (nx>=1 && nx<=n && ny>=1 && ny<=m) 过滤无效邻居,不会越界。
  2. 时间复杂度
    • 双重循环遍历所有单元格:O(N×M)。
    • 每个单元格检查最多8个邻居:常数时间。
    • 总复杂度 O(8×N×M) ≈ 8×10⁴(N,M ≤ 100)。
  3. 空间复杂度
    • 海拔数组 h[110][110] 占用固定大小,约 110×110×4 字节 ≈ 48 KB。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>using namespace std;intmain(){	cout<<"##########  一站式掌握信奥赛知识!  ##########";	cout<<"#############  冲刺信奥赛拿奖!  #############";	cout<<"######  课程购买后永久学习,不受限制!   ######";return 0;}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901

2026年3月GESP真题及题解(C++四级):山之谷-第19张图片-四季读书网

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/404372026年3月GESP真题及题解(C++四级):山之谷-第20张图片-四季读书网

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:https://blog.csdn.net/weixin_66461496/category_13096895.html

CSP信奥赛C++标准模板库STL:https://blog.csdn.net/weixin_66461496/category_13108077.html

信奥赛C++提高组csp-s知识详解及案例实践:https://blog.csdn.net/weixin_66461496/category_13113932.html

4、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_13125089.html

5、GESP C++考级真题题解:

2026年3月GESP真题及题解(C++四级):山之谷-第21张图片-四季读书网

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html

2026年3月GESP真题及题解(C++四级):山之谷-第22张图片-四季读书网

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html

2026年3月GESP真题及题解(C++四级):山之谷-第23张图片-四季读书网 GESP(C++ 七级+八级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_13117178.html

·     文末祝福    ·

#include<bits/stdc++.h>using namespace std;intmain(){	cout<<"跟着王老师一起学习信奥赛C++";	cout<<"    成就更好的自己!       ";	cout<<"  csp信奥赛一等奖属于你!   ";return 0;}
2026年3月GESP真题及题解(C++四级):山之谷-第24张图片-四季读书网

抱歉,评论功能暂时关闭!