[语言月赛 202307] Three-View Projection 题解
Source & Knowledge
2023 年 7 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
给定一个
题目分析
本题难点在于较为复杂的坐标转换。
我们首先定义,按照
我们如果使用如下方式进行读入:
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >> a[i][j];
那么我们是按照从左向右的顺序读入的每一列的信息。因此,
正视图
正视图要求从左向右。显然输出的是每一列的情况,因此我们首先需要正序枚举第一维(列,
在每一列中,我们统计这一列是否出现过正方体,如果出现过则在当前位置输出
核心代码如下:
for (int i = 1; i <= n; ++i) {
int x = 0;
for (int j = 1; j <= m; ++j) {
if (a[i][j] == 1)
x = 1;
}
cout << x << " ";
}
cout << endl;
左视图
左视图要求从后向前。显然输出的是每一行的情况,因此我们首先需要倒序枚举第二维(行,
在每一行中,我们统计这一行是否出现过正方体,如果出现过则在当前位置输出
核心代码如下:
for (int j = m; j >= 1; --j) {
int x = 0;
for (int i = 1; i <= n; ++i) {
if (a[i][j] == 1)
x = 1;
}
cout << x << " ";
}
cout << endl;
俯视图
左视图要求从后向前,从左向右。因此我们首先需要倒序枚举第二维(行,
核心代码如下:
for (int j = m; j >= 1; --j) {
for (int i = 1; i <= n; ++i) {
cout << a[i][j] << " ";
}
cout << endl;
}