首页 > 代码库 > 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【模拟+思维+迭代更新】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。