202506-画布裁剪(luogu-B4360)
GESP C++四级2025年6月真题。本题主要考查二维数组的应用。属于四级题中的简单题。难度⭐⭐☆☆☆。本题在洛谷评定为入门
。
luogu-B4360 [GESP202506 四级] 画布裁剪
题目要求
题目描述
小 A 在高为 宽为 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 行 列的字符矩阵,其中的字符均为 ASCII 码位于 之间的可见字符,小 A 只保留画布中由第 行到第 行、第 列到第 列构成的子矩阵。
小 A 将画布交给了你,你能帮他完成画布的裁剪吗?
输入格式
第一行,两个正整数 ,分别表示画布的行数与列数。
第二行,四个正整数 ,表示保留的行列边界。
接下来 行,每行一个长度为 的字符串,表示画布内容。
输出格式
输出共 行,每行一个长度为 的字符串,表示裁剪后的画布。
输入输出样例 #1
输入 #1
3 5
2 2 2 4
.....
.>_<.
.....
输出 #1
>_<
输入输出样例 #2
输入 #2
5 5
1 2 3 4
AbCdE
fGhIk
LmNoP
qRsTu
VwXyZ
输出 #2
Cd
hI
说明/提示
对于所有测试点,保证 ,,。
题目分析
本题是一道简单的二维数组操作题目。主要考察对字符矩阵的截取操作。
1. 数据结构设计
- 使用字符串数组
str_ary[105]
存储输入的画布内容 - 数组大小设置为105是为了满足题目要求的最大范围(),并留有余量
2. 核心算法思路
- 首先读入画布的高度h和宽度w
- 读入需要保留的区域范围:行( 到 )和列( 到 )
- 读入整个画布内容,每行存储为一个字符串
- 按照指定范围输出子矩阵:
- 外层循环遍历行:从到
- 内层循环遍历列:从到
- 注意字符串下标从0开始,输出时需要将列坐标减1
3. 算法复杂度分析
时间复杂度
- 读入画布内容:
- 输出裁剪区域:
- 总体时间复杂度:
空间复杂度
- 存储画布内容:
- 其他变量:
- 总体空间复杂度:
示例代码
#include <iostream>
// 定义字符串数组存储画布内容,最大支持105行
std::string str_ary[105];
int main() {
// 声明画布的高度和宽度变量
int h, w;
std::cin >> h >> w;
// 声明裁剪区域的行列范围变量
int x1, x2, y1, y2;
std::cin >> x1 >> x2 >> y1 >> y2;
// 读入画布内容,每行一个字符串
for (int i = 1; i <= h; i++) {
std::cin >> str_ary[i];
}
// 输出裁剪后的画布内容
// 外层循环遍历选定的行范围
for (int i = x1; i <= x2; i++) {
// 内层循环遍历选定的列范围
for (int j = y1; j <= y2; j++) {
// 注意:由于字符串下标从0开始,所以这里需要j-1
std::cout << str_ary[i][j - 1];
}
// 每输出完一行后换行
std::cout << "\n";
}
return 0;
}
本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

最后更新于