1058 立体图
这个题,这么变态,我居然AC过,而且还没有博客,我自己他妈都不都不信
题意:定义每个积木为如下格式,并且不会做任何翻转旋转,只会严格以这一种形式摆放
意思就是说,这个积木的样子就是一个打表格,所以这个就是我们最基础上的东西
不是这个题这么变态我怎么可能做过
我真服了
把图形存到数组里面(也就是所谓的打表),然后进行一个一个的覆盖
覆盖
肯定需要进行去重
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const char Stick[6][8]=//打表所得
{
"..+---+",
"./ /|",
"+---+ |",
"| | +",
"| |/.",
"+---+.."
};//单个方块
int a[55][55];
char Paint[550][550];//画布
inline void Draw(int x,int y)
{//涂鸦函数
int i,j;
for(i=0;i<6;i++)
for(j=0;j<7;j++)
if(Stick[6-i-1][j]!='.')//进行填方块
Paint[x-i][y+j]=Stick[6-i-1][j];//放置方块
}
int main()
{
int N,M;
int K=0,L;
int i,j,x,y;
scanf("%d%d",&N,&M);
L=4*M+2*N+1;//画布总表面积
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
scanf("%d",&a[i][j]);
K=max(K,a[i][j]*3+2*(N-i+1)+1);//计算长度
}
for(i=1;i<=K;i++)
for(j=1;j<=L;j++)
Paint[i][j]='.';//预处理
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
x=K-2*(N-i);
y=2*(N-i)+4*(j-1)+1;//坐标xy计算
while(a[i][j]--)
{
Draw(x,y);//画
x-=3;//上
}
}
for(i=1;i<=K;i++)
{
for(j=1;j<=L;j++)
printf("%c",Paint[i][j]);
printf("\n");//输出画布
}//打印画布
return 0;
}