首页 > 代码库 > UVA 1030 - Image Is Everything【模拟+思维+迭代更新】

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 }

 

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