• uva 1030


    题目链接:uva 1030 - Image Is Everything


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


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


    #include <stdio.h>
    #include <string.h>
    
    #define REP(i,n) for (int i = 0; i < (n); i++)
    const int N = 15;
    
    int n;
    char view[N][N][N], pos[N][N][N];
    
     char getChar() {
    	 char ch;
    	 while (true) {
    		 ch = getchar();
    		 if ((ch >= 'A' && ch <= 'Z') || ch == '.') return ch;
    	 }
     }
    
    void input() {
    	REP(i, n) REP(k, 6) REP(j, n) view[k][i][j] = getChar();
    	REP(x, n) REP(y, n) REP(z, n) pos[x][y][z] = '#';
    }
    
    void search(int i, int j, int k, int p, int& x, int& y, int& z) {
    	switch(k) {
    		case 0:
    			x = i, y = j, z = p; return;
    		case 1:
    			x = i, y = p, z = n - j - 1; return;
    		case 2:
    			x = i, y = n - j - 1, z = n - p - 1; return;
    		case 3:
    			x = i, y = n - p - 1, z = j; return;
    		case 4:
    			x = p, y = j, z = n - i - 1; return;
    		case 5:
    			x = n - p - 1, y = j, z = i; return;
    	}
    }
    
    int solve() {
    
    	int x, y, z;
    
    	REP(k, 6) REP(i, n) REP(j, n)
    		if (view[k][i][j] == '.')
    			REP(p, n) {
    				search(i, j, k, p, x, y, z);
    				pos[x][y][z] = '.';
    			}
    
    	while (true) {
    		bool flag = true;
    		REP(k, 6) REP(i, n) REP(j, n)
    			if (view[k][i][j] != '.')
    				REP(p, n) {
    					search(i, j, k, p, x, y, z);
    					if (pos[x][y][z] == '.') continue;
    					if (pos[x][y][z] == '#')
    						pos[x][y][z] = view[k][i][j];
    
    					if(pos[x][y][z] == view[k][i][j]) break;
    					pos[x][y][z] = '.';
    					flag = false;
    				}
    		if (flag) break;
    	}
    
    	int ans = 0;
    	REP(x, n) REP(y, n) REP(z, n)
    		if (pos[x][y][z] != '.') ans++;
    	return ans;
    }
    
    int main () {
    	while (scanf("%d", &n) == 1 && n) {
    		input();
    		printf("Maximum weight: %d gram(s)
    ", solve() );
    	}
    	return 0;
    }
    


  • 相关阅读:
    94. Binary Tree Inorder Traversal
    101. Symmetric Tree
    38. Count and Say
    28. Implement strStr()
    实训团队心得(1)
    探索性测试入门
    LC.278. First Bad Version
    Search in Unknown Sized Sorted Array
    LC.88. Merge Sorted Array
    LC.283.Move Zeroes
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3455153.html
Copyright © 2020-2023  润新知