ZJNU 1535 - 新建的大楼--中高级

因为从俯视图看,输入输出的视角是从右下方看向左上方的

所以左上角的正方体最有可能被其他正方体挡住

立体上,底部的正方体最有可能被顶部的正方体挡住

所以绘图应该从后往前,从下往上绘制

剩下的就是一大堆计算和判断了

采用的是先绘制出规范的图再与输入的图做对比的方式

#include<stdio.h>
#include<string.h>
int n,m,ar[21][21];
char ori[200][200],bd[200][200],node[6][8]={
    "..+---+",
    "./   /|",
    "+---+ |",
    "|   | +",
    "|   |/.",
    "+---+.."
};
void dr(int x,int y){
    int i,j;
    for(i=0;i<6;i++)
        for(j=0;j<7;j++)
            if(node[i][j]!='.')
                bd[x+i][y+j]=node[i][j];
}
int main(){
    int i,j,h=-1,w,x,y;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            scanf("%d",&ar[i][j]);
    getchar();
    while(gets(ori[++h]));
    w=strlen(ori[0]);
    for(i=0;i<h;i++)
        memset(bd[i],'.',w);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++){
            x=h-(4+2*n)+2*i;
            y=(n-1)*2+4*j-2*i;
            while(ar[i][j]--){
                dr(x,y);
                x-=3;
            }
        }
    for(i=0;i<h;i++)
        for(j=0;j<w;j++)
            if(bd[i][j]!=ori[i][j]){
                puts("NO");
                return 0;
            }
    puts("YES");
    
    return 0;
}

 

posted @ 2020-01-27 01:23  StelaYuri  阅读(133)  评论(0编辑  收藏  举报