前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UVA 1030 - Image Is Everything【模拟+思维+迭代更新】

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

作者头像
Angel_Kitty
发布2018-04-09 15:04:50
6770
发布2018-04-09 15:04:50
举报

题目链接:uva 1030 - Image Is Everything

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

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

下面给出AC代码:

代码语言:javascript
复制
  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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档