洛谷 P1058 立体图 题解
哈哈哈这道题实在太可爱了w
刚看到感觉这题好难啊,怎么可能是2级……一写发现完全没有难度,只要仔细就可以啦w
需要注意的点:
·不知道有没有人和我习惯一样,坐标系画图时的方向和日常定义数组的方向不一样orz
·保存左上角与右下角的坐标,不断更新
·起始点要保证所有点都能画在mapp图里
(写得不好看但应该能看的代码)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
int max1=23333,max2=23333,max3=0,max4=0;
int n,m,a[51][51];
char mapp[23333][23333];
void qwq(int x,int y){
max1=min(max1,x);max2=min(max2,y);
max3=max(max3,x+6);max4=max(max4,y+5);
mapp[x+2][y]=mapp[x+6][y]=mapp[x][y+2]=mapp[x+4][y+2]=mapp[x][y+5]=mapp[x+4][y+5]=mapp[x+6][y+3]=43;
mapp[x+3][y]=mapp[x+4][y]=mapp[x+5][y]=mapp[x+1][y+2]=mapp[x+2][y+2]=mapp[x+3][y+2]=mapp[x+1][y+5]=mapp[x+2][y+5]=mapp[x+3][y+5]='-';
mapp[x+1][y+1]=mapp[x+5][y+1]=mapp[x+5][y+4]=47;
mapp[x][y+3]=mapp[x][y+4]=mapp[x+4][y+3]=mapp[x+4][y+4]=mapp[x+6][y+1]=mapp[x+6][y+2]=124;
mapp[x+3][y+1]=mapp[x+4][y+1]=mapp[x+2][y+1]=mapp[x+1][y+3]=mapp[x+2][y+3]=mapp[x+3][y+3]=mapp[x+1][y+4]=mapp[x+2][y+4]=mapp[x+3][y+4]=mapp[x+5][y+2]=mapp[x+5][y+3]=' ';
}
void init(){
for(int i=1;i<=2333;i++)
for(int j=1;j<=2333;j++)mapp[i][j]=46;
}
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);
int q1=150;int q2=350;
init();
for(int i=1;i<=m;i++){
q1-=2;q2+=2;
for(int j=1;j<=n;j++){
q1+=4;
for(int k=1;k<=a[i][j];k++){
q2-=3;qwq(q1,q2);
}
q2+=3*a[i][j];
}
q1-=4*n;
}
for(int i=max2;i<=max4;i++){
for(int j=max1;j<=max3;j++){
cout<<mapp[j][i];
}
printf("\n");
}
return 0;
}
qwqwqwq