UVA 1030 - Image Is Everything模拟+思维+迭代更新
Posted Angel_Kitty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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模拟+思维+迭代更新的主要内容,如果未能解决你的问题,请参考以下文章
Every norm is a convex function
UVA10056 What is the Probability概率