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

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

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

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

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

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

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

 1 /*
 2 Written By StelaYuri
 3 */
 4 #include<stdio.h>
 5 #include<string.h>
 6 int n,m,ar[21][21];
 7 char ori[200][200],bd[200][200],node[6][8]={
 8     "..+---+",
 9     "./   /|",
10     "+---+ |",
11     "|   | +",
12     "|   |/.",
13     "+---+.."
14 };
15 void dr(int x,int y){
16     int i,j;
17     for(i=0;i<6;i++)
18         for(j=0;j<7;j++)
19             if(node[i][j]!='.')
20                 bd[x+i][y+j]=node[i][j];
21 }
22 int main(){
23     int i,j,h=-1,w,x,y;
24     scanf("%d%d",&n,&m);
25     for(i=0;i<n;i++)
26         for(j=0;j<m;j++)
27             scanf("%d",&ar[i][j]);
28     getchar();
29     while(gets(ori[++h]));
30     w=strlen(ori[0]);
31     for(i=0;i<h;i++)
32         memset(bd[i],'.',w);
33     for(i=0;i<n;i++)
34         for(j=0;j<m;j++){
35             x=h-(4+2*n)+2*i;
36             y=(n-1)*2+4*j-2*i;
37             while(ar[i][j]--){
38                 dr(x,y);
39                 x-=3;
40             }
41         }
42     for(i=0;i<h;i++)
43         for(j=0;j<w;j++)
44             if(bd[i][j]!=ori[i][j]){
45                 puts("NO");
46                 return 0;
47             }
48     puts("YES");
49     
50     return 0;
51 }

猜你喜欢

转载自www.cnblogs.com/stelayuri/p/12235327.html
今日推荐