链接:https://www.nowcoder.com/acm/contest/85/F
来源:牛客网
题目描述
Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型。既然你高考选了技术, 那想必你一定想知道,这个模型的三视图是什么吧!
图中, 轴、 轴和 轴的方向已经标明。现在规定,图中的红色面为主视面,蓝色面为右视面(注意输出中应为左视而非右视),黄色面为俯视面。具体方向可以观察样例。
输入描述:
第一行四个数 ,表示该三维空间大小为 ,且有 个立方体。 接下去 行,每行三个整数 ,表示其位置坐标。
输出描述:
输出共
行,前
行每行
个字符,输出正视图及左视图,两幅图之间有一列空格;接下去输出一个空行;再接下去
行,每行
个字符,表示俯视图。其中 表示空, 表示有立方体。
输入例子:
2 2 2 2
1 1 1
2 2 2
输出例子:
.x .x
x. x. x.
.x
-->
备注:
思路分析:一开始傻乎乎的设了个唯一的三维数组,想着覆盖来解,发现很麻烦,跟随大神的脚步意识到直接建3个二维数组分别表示主视图,左视图,俯视图即可,在主视图里就不管z了,任何一个z下的x,y坐标存在都将这一点标记为有立方体,这样做就会非常简单了
然后可以注意下这个#define用法,比较方便
#include <bits/stdc++.h>
using namespace std;
const int inf=<<;
typedef long long ll;
const double pi=acos(-);
#define mst(a,b) memset(a,b,sizeof(a))
char a[][],b[][],c[][];//分别用来保存主,左,俯视图,二维即可
int X,Y,Z,n,x,y,z;
int main(){
mst(a,'.');
mst(b,'.');
mst(c,'.');
cin>>X>>Y>>Z>>n;
while(n--){
cin>>x>>y>>z;
a[y][x]='x';
b[y][z]='x';
c[z][x]='x';
}
for(int i=Y;i>;i--,puts("")){
for(int j=;j<=X;j++) cout<<a[i][j];
cout<<" ";
for(int j=;j<=Z;j++) cout<<b[i][j];
}
puts("");
for(int i=;i<=Z;i++){
for(int j=;j<=X;j++) cout<<c[i][j];
cout<<endl;
}
return ;
}