1 条题解
-
0
自动搬运
来自洛谷,原作者为

ShanCreeperPro
DILL QQTeam:746219450搬运于
2025-08-24 21:14:14,当前版本为作者最后更新于2022-10-02 17:19:14,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
B3662 [语言月赛202209] 山峰 題解
Source & Knowledge
2022 年 9 月语言月赛,由洛谷网校入门计划 / 基础计划提供。
本题考察对二维数组的掌握与运用。
文字题解
题目大意
给定 大小的矩阵和 次操作,每次操作给定 2 个坐标交换他们的值,最后求有几个坐标的值比上下左右的值大(即山峰),并输出这几个坐标。
解析
我们把这道题拆成四个步骤:读入数据、交换操作、输出山峰个数,输出山峰坐标。
读入数据:
观察到,本题的数据范围为 ,读入量超过 ,所以我们可以使用
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))。同时,存放矩阵的数组的大小应当大于等于 ,否则可能会出现数组越界。输出山峰坐标:
因为是先输出山峰个数再输出山峰坐标,所以我们不能得到一个输出一个,可以定义一个结构体
Ans来存储答案,其中包括x,y即山峰坐标,即Ans[++ans].x=i; Ans[++ans].y=j。
至此,整道题目就完成了。
注意事项:
- 若使用
std::cin读入数据,请务必关闭同步流降低超出时间限制的风险; - 下标从 开始,更加符合实际意义且方便进行比较;
视频题解
完整代码见视频题解
- 若使用
- 1
信息
- ID
- 7848
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者