B3662 [语言月赛202209] 山峰 題解
ShanCreeperPro · · 题解
B3662 [语言月赛202209] 山峰 題解
Source & Knowledge
2022 年 9 月语言月赛,由洛谷网校入门计划 / 基础计划提供。
本题考察对二维数组的掌握与运用。
文字题解
题目大意
给定
解析
我们把这道题拆成四个步骤:读入数据、交换操作、输出山峰个数,输出山峰坐标。
读入数据:
观察到,本题的数据范围为 scanf 来读入数据,或关闭同步流来加快 std::cin 的速度。
交换操作:
将 2 个数据交换,可以想象成交换 2 个盒子内的物品,需要拿第三个盒子来暂放物品,操作如下表所示:
| 盒子 1 | 盒子 2 | 盒子 3 | |
|---|---|---|---|
| 初始 | 空 | ||
| 第一次操作 | 空 | ||
| 第二次操作 | 空 | ||
| 第三次操作 | 空 |
转换成 C++ 语言,即:tmp=x; x=y; y=tmp;。
在这里,推荐另一个更快的方法,使用 std::swap(int x,int y) 函数,其中
输出山峰个数:
所有交换操作完成后,我们可以遍历矩阵中的每一个元素并和上下左右比较,如果该元素为山峰,将答案加
为了避免边角的山峰比较时越界,我们在读入时下标从 memset(a,0,sizeof(a))。同时,存放矩阵的数组的大小应当大于等于