1058 立体图

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值