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