{"title":"# Three-View Projection\n\n## 题目描述\n\n> 全文与 $x, y, z$ 轴/方向有关的内容均基于以下的 $x, y, z$ 轴、位置及观测方向。观测者站在如图所示的位置,正在向着 $y$ 周(绿线)正方向(箭头方向)观测。 \n> \n\n现在在地面上有一个长、宽(沿 $x, y$ 轴延展的长度)为 $n \text{ cm}, m \text{ cm}$ 的长方形区域。我们将这片区域划分为 $n \times m$ 个小格子。每个小格子中可以放置一个边长为 $1 \text{ cm}$ 的小正方体。\n\n我们使用一个整数二元组 $(x, y)$ 来表示一个格子在空间中的位置,其代表从左往右数第 $x$ 个,从前往后数第 $y$ 个格子。\n\n\n\n例如,上图展示的 $3 \times 4$ 区域中,按照观测者的位置,可以发现红蓝线($x, z$ 轴)所在的面为前面,蓝绿线($y, z$ 轴)所在的面为左面,红绿线($x, y$ 轴)所在的面为下面。五个小正方体的位置分别为 $(1, 1), (1, 3), (3, 1), (3, 3), (3, 4)$。\n\n三视图是观测者从上面(从上往下)、左面(从左往右)、正面(从前往后)三个不同角度观察同一个空间几何体而画出的图形。\n\n\n\n\n\n例如,以上是示例区域的三视图。\n\n现在,给定一个区域及其中的正方体排布情况,请你帮助计算出这个区域的三视图。\n\n## 输入格式\n\n输入共 $n + 1$ 行。\n\n第一行为两个整数 $n, m$,代表长方形区域的长、宽。 \n接下来 $n$ 行,每行 $m$ 个整数。其中第 $x$ 行第 $y$ 列的整数 $a _ {x, y}$ 代表 $(x, y)$ 处格子的情况,若 $a _ {x, y} = 1$,代表该格子有小正方体;否则,代表该格子没有小正方体。\n\n## 输出格式\n\n输出共 $2 + m$ 行。\n\n第一行为 $n$ 个整数,代表自左至右正视图的情况。如果正视图中某个位置有填充,则输出 $1$,否则输出 $0$。同一行整数之间两两以一个空格隔开。 \n第二行为 $m$ 个整数,代表自后至前左视图的情况。如果左视图中某个位置有填充,则输出 $1$,否则输出 $0$。同一行整数之间两两以一个空格隔开。 \n接下来 $m$ 行,每行 $n$ 个整数,代表自后至前自左至右俯视图的情况。如果俯视图中某个位置有填充,则输出 $1$,否则输出 $0$。同一行整数之间两两以一个空格隔开。\n\n以上方向均基于观测者初始站立位置及方向。如果对输出的顺序有疑惑,请参照样例辅助理解。\n\n## 样例 #1\n\n### 样例输入 #1\n\n\n3 4\n1 0 1 0\n0 0 0 0\n1 0 1 1\n\n\n### 样例输出 #1\n\n\n1 0 1\n1 1 0 1\n0 0 1\n1 0 1\n0 0 0\n1 0 1\n\n\n## 样例 #2\n\n### 样例输入 #2\n\n\n10 7\n0 1 0 0 0 0 0\n0 0 0 0 1 0 0\n0 0 0 0 0 0 0\n0 0 0 0 0 0 0\n1 0 0 0 0 0 0\n0 0 0 0 0 1 0\n0 0 1 0 1 0 0\n0 1 1 0 0 0 0\n1 0 0 0 0 0 0\n0 0 0 0 0 0 0\n\n\n### 样例输出 #2\n\n\n1 1 0 0 1 1 1 1 1 0\n0 1 1 0 1 1 1\n0 0 0 0 0 0 0 0 0 0\n0 0 0 0 0 1 0 0 0 0\n0 1 0 0 0 0 1 0 0 0\n0 0 0 0 0 0 0 0 0 0\n0 0 0 0 0 0 1 1 0 0\n1 0 0 0 0 0 0 1 0 0\n0 0 0 0 1 0 0 0 1 0\n\n\n## 提示\n\n### 样例 1 解释\n\n样例 1 即为题目中的示例。\n\n\n\n### 数据规模与约定\n\n对于 $100%$ 的数据,保证 $1 \leq n, m \leq 200$,$0 \leq a _ {x, y} \leq 1$。\n\n| 测试点编号 | $n$ | $m$ | $a _ {x, y}$ |\n| :-----------: | :-----------: | :-----------: | :-----------: |\n| $1$ | $= 1$ | $= 1$ | 无特殊限制 |\n| $2 \sim 4$ | $\leq 10$ | $\leq 10$ | 无特殊限制 |\n| $5 \sim 6$ | $\leq 200$ | $= 1$ | 无特殊限制 |\n| $7$ | $\leq 200$ | $\leq 200$ | $= 1$ |\n| $8 \sim 10$ | $\leq 200$ | $\leq 200$ | 无特殊限制 |\ncppcode.内容:cpp\n#include <iostream>\n#include <vector>\nusing namespace std;\n\nint main() {\n int n, m;\n cin >> n >> m;\n vector<vector<int>> grid(n, vector<int>(m));\n for (int i = 0; i < n; i++) {\n for (int j = 0; j < m; j++) {\n cin >> grid[i][j];\n }\n }\n\n vector<int> front(n);\n vector<int> left(m);\n vector<vector<int>> top(m, vector<int>(n));\n\n for (int i = 0; i < n; i++) {\n for (int j = 0; j < m; j++) {\n if (grid[i][j] == 1) {\n front[i] = 1;\n left[j] = 1;\n top[j][i] = 1;\n }\n }\n }\n\n for (int i : front) {\n cout << i << " ";\n }\n cout << endl;\n\n for (int i : left) {\n cout << i << " ";\n }\n cout << endl;\n\n for (auto row : top) {\n for (int i : row) {\n cout << i << " ";\n }\n cout << endl;\n }\n\n return 0;\n}\n


原文地址: http://www.cveoy.top/t/topic/pNqV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录