uva 1030 - Image Is Everything(迭代更新)

原创 2013年12月02日 21:15:04

题目链接: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)\n", solve() );
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

uva1030 Image Is Everything

暴力
  • sdfzyhx
  • sdfzyhx
  • 2016年11月07日 20:11
  • 66

例题1.6 立方体成像 UVa1030

1.题目描述:点击打开链接 2.解题思路:本题只给了六个视图,要求找最大的立方块数,看上去貌似很棘手的一个问题。我们可以尝试用排除法,如果删到不能删除时,那么剩下的立方块自然就是最多的。由于视图中为...

World Finals 2004 / UVa 1030 Image Is Everything (想法题&迭代更新)

1030 - Image Is Everything Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com...

uva 1030 Image Is Everything(迭代更新)

uva 1030 Image Is Everything Your new company is building a robot that can hold small lightwe...

UVA 1030 - Image Is Everything(贪心枚举)

Description Your new company is building a robot that can hold small lightweight objects. The rob...

UVA 1030 Image Is Everything

刘汝佳大神书上的原题,思路是寻找六个视图中颜色的冲突,只要

【简单题】【综合能力】UVA-1030-Image Is Everything

题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_pro...

Uva 1030 - Image Is Everything

方法: 建立空间直角坐标系,把六个视角看到的投影到坐标系中,看六个视角看到的是否会有冲突,有冲突代表改点不存在 PS: 某渣实在是不想吐槽了,初始化的是把.写成了*  特么害我一直以为我坐标系建错了...

uvaoj 1030 - Image Is Everything

总结: 1.以前看过汝佳哥源代码,没有打在电脑里提交,自以为会了,最近重新做题的时候才发现原来只是看懂了,自己并不能很快的思考出来这个问题,以后凡是碰到代码,尽所能付诸于实践!以写代码,写博客的形式...

UVaLive-2995 Image Is Everything

题目描述: 给一个N*N*N的立方体(可以缺少某几块)的六个视图,依次为前、左、后、右、顶、底视图。“."代表可以看透,其他字母代表颜色。每一小方块各个面颜色相同。问这个物体的最大质量。直到读取的N...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva 1030 - Image Is Everything(迭代更新)
举报原因:
原因补充:

(最多只允许输入30个字)