洛谷 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("
");
	}
	return 0;
}
原文地址:https://www.cnblogs.com/erutsiom/p/9904905.html