UVA 1030 - Image Is Everything【模拟+思维+迭代更新】

题目链接:uva 1030 - Image Is Everything

题目大意:有一个最大为n*n*n的立方体的一个不规整立体,由若干个1*1*1的小正方体构成(每一个小正方体被涂成不同的颜色),给出n,然后是该立体的前、左、后、右、上和下的视图,然后判断该立体的最大体积是多少。

解题思路:首先先把所有视图上为‘.'的地方清空,然后枚举视图上不为’.'的地方,计算对应的坐标第一个不为空得位置,将其涂色(注意,若一个正方体被着两种不同的颜色,说明该位置不存在正方体)。

下面给出AC代码:

 

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 const int maxn=10;
  4 int n;
  5 char pos[maxn][maxn][maxn];
  6 char view[6][maxn][maxn];
  7 char read_char()
  8 {
  9     char ch;
 10     for(;;)
 11     {
 12         ch=getchar();
 13         if((ch>='A'&&ch<='Z')||ch=='.')
 14             return ch;
 15     }
 16 }
 17 void get(int k,int i,int j,int len,int &x,int &y,int &z)
 18 {
 19     if(k==0)
 20     {
 21         x=len;
 22         y=j;
 23         z=i;
 24     }
 25     if(k==1)
 26     {
 27         x=n-1-j;
 28         y=len;
 29         z=i;
 30     }
 31     if(k==2)
 32     {
 33         x=n-1-len;
 34         y=n-1-j;
 35         z=i;
 36     }
 37     if(k==3)
 38     {
 39         x=j;
 40         y=n-1-len;
 41         z=i;
 42     }
 43     if(k==4)
 44     {
 45         x=n-1-i;
 46         y=j;
 47         z=len;
 48     }
 49     if(k==5)
 50     {
 51         x=i;
 52         y=j;
 53         z=n-1-len;
 54     }
 55 }
 56 int main()
 57 {
 58     while(scanf("%d",&n)!=EOF)
 59     {
 60         if(n==0)
 61             break;
 62         for(int i=0;i<n;i++)
 63         {
 64             for(int k=0;k<6;k++)
 65             {
 66                 for(int j=0;j<n;j++)
 67                 {
 68                     view[k][i][j]=read_char();
 69                 }
 70             }
 71         }
 72         for(int i=0;i<n;i++)
 73         {
 74             for(int j=0;j<n;j++)
 75             {
 76                 for(int k=0;k<n;k++)
 77                 {
 78                     pos[i][j][k]='#';
 79                 }
 80             }
 81         }
 82         for(int k=0;k<6;k++)
 83         {
 84             for(int i=0;i<n;i++)
 85             {
 86                 for(int j=0;j<n;j++)
 87                 {
 88                     if(view[k][i][j]=='.')
 89                     {
 90                         for(int p=0;p<n;p++)
 91                         {
 92                             int x,y,z;
 93                             get(k,i,j,p,x,y,z);
 94                             pos[x][y][z]='.';
 95                         }
 96                     }
 97                 }
 98             }
 99         }
100         for(;;)
101         {
102             bool done=true;
103             for(int k=0;k<6;k++)
104             {
105                 for(int i=0;i<n;i++)
106                 {
107                     for(int j=0;j<n;j++)
108                     {
109                         if(view[k][i][j]!='.')
110                         {
111                             for(int p=0;p<n;p++)
112                             {
113                                 int x,y,z;
114                                 get(k,i,j,p,x,y,z);
115                                 if(pos[x][y][z]=='.')
116                                     continue;
117                                 if(pos[x][y][z]=='#')
118                                 {
119                                     pos[x][y][z]=view[k][i][j];
120                                     break;
121                                 }
122                                 if(pos[x][y][z]==view[k][i][j])
123                                     break;
124                                 pos[x][y][z]='.';
125                                 done=false;
126                             }
127                         }
128                     }
129                 }
130             }
131             if(done)
132                 break;
133         }
134         int ans=0;
135         for(int i=0;i<n;i++)
136         {
137             for(int j=0;j<n;j++)
138             {
139                 for(int k=0;k<n;k++)
140                 {
141                     if(pos[i][j][k]!='.')
142                         ans++;
143                 }
144             }
145         }
146         printf("Maximum weight: %d gram(s)\n",ans);
147     }
148     return 0;
149 }

 

posted @ 2017-07-19 11:08  Angel_Kitty  阅读(406)  评论(0编辑  收藏  举报