uva 2995

来源:互联网 发布:vb.net select 编辑:程序博客网 时间:2024/05/17 09:10
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define REP(i, n) for(int i = 0; i < (n); i++)const int maxn = 10;char pos[maxn][maxn][maxn], view[6][maxn][maxn];char read_char(void);void get(int k, int i, int j, int p, int &x, int &y, int &z, int n);char read_char(void){char ch;for(;;){ch = getchar();if( (ch >= 'A' && ch <= 'Z') || ch == '.') return ch; }}void get(int k, int i, int j, int p, int &x, int &y, int &z, int n){if(k == 0){ x = p; y = j; z = i; }if(k == 1){ x = n - 1 - j; y = p; z = i; }if(k == 2){ x = n - 1 - p; y = n - 1 - j; z = i; }if(k == 3){ x = j; y = n - 1 - p; z = i; }if(k == 4){ x = n - 1 - i; y = j; z = p; }if(k == 5){ x = i; y = j; z = n - 1 - p; }}int main(void){int n;while( scanf("%d", &n) == 1 && n){REP(i, n) REP(k, 6) REP(j, n) view[k][i][j] = read_char();REP(x, n) REP(y, n) REP(z, n) pos[x][y][z] = '#';REP(k, 6) REP(i, n) REP(j, n) if(view[k][i][j] == '.'){REP(p, n){int x, y, z;get(k, i, j, p, x, y, z, n);pos[x][y][z] = '.';}}for(;;){bool done = true;REP(k, 6) REP(i, n) REP(j, n) if(view[k][i][j] != '.'){REP(p, n){int x, y, z;get(k, i, j, p, x, y, z, n);if(pos[x][y][z] == '.') continue;if(pos[x][y][z] == '#'){pos[x][y][z] = view[k][i][j];break;} if( pos[x][y][z] == view[k][i][j])break;pos[x][y][z] = '.';done = false; } }if(done) break;}int tot = 0;REP(i, n) REP(j, n) REP(k, n) if( pos[i][j][k] != '.') tot++;printf("Maximum weight: %d gram(s)\n", tot);}return 0;}

原创粉丝点击