LA 2995 Image Is Everything 立方体成像 World Final 2004
有一个 n * n * n 的立方体,其中一些单位立方体已经缺失(剩下部分不一定连通)。每个单位立方体重 1 克,且被涂上单一的颜色(即 6 个面的一颜色相同)。给出前、左、后、右、顶、底 6 个视图,你的任务是判断这个屋里剩下的最大的重量。
看完这题之后,我满头雾水,不知道从何下手。后来模拟了一下数据,才知道怎么解决。
首先,一个单位立方体只有一种颜色,如果从不同的视图看到这个立方体的颜色不同,那么就删除这个立方体。通过这样循环删除,到最后所有的小立方体都符合题目所要求,就是最大的立方体数目,即最大的重量。
附AC代码:
1: #include <stdio.h>
2: #include <math.h>
3: #include <iostream>
4: #include <cstdarg>
5: #include <algorithm>
6: #include <string.h>
7: #include <stdlib.h>
8: #include <string>
9: #include <list>
10: #include <vector>
11: #include <map>
12: #define LL long long
13: #define M(a) memset(a, 0, sizeof(a))
14: #define orz(i, k) for(int i = 0; i < k; i++)
15: using namespace std;
16: int n;
17: void Clean(int count, ...)
18: {
19: va_list arg_ptr;
20: va_start (arg_ptr, count);
21: for (int i = 0; i < count; i++)
22: M(va_arg(arg_ptr, int*));
23: va_end(arg_ptr);
24: }
25: char Input()
26: {
27: char ch;
28: while (1)
29: {
30: ch = getchar();
31: if (ch >= 'A' && ch <= 'Z') return ch;
32: else if (ch == '.') return ch;
33: }
34: }
35:
36: void Get(int k, int i, int j, int len, int &x, int &y, int &z)
37: {
38: switch (k)
39: {
40: case 0: x = len, y = j, z = i; break;
41: case 1: x = n - 1 - j, y = len, z = i; break;
42: case 2: x = n - 1 - len, y = n - 1 - j, z = i; break;
43: case 3: x = j, y = n - 1 - len, z = i; break;
44: case 4: x = n - 1 - i, y = j, z = len; break;
45: case 5: x = i, y = j, z = n - 1 - len; break;
46: }
47: }
48:
49: char pos[10][10][10];
50: char view[6][10][10];
51: int main()
52: {
53: while (~scanf("%d", &n) && n)
54: {
55: Clean(1, view);
56:
57: orz(i, n) orz(j, 6) orz(k, n) view[j][i][k] = Input();
58: orz(i, n) orz(j, n) orz(k, n) pos[i][j][k] = '#';
59: orz(k, 6) orz(i, n) orz(j, n)
60: {
61: if (view[k][i][j] == '.')
62: {
63: orz(l, n)
64: {
65: int x, y, z;
66: Get(k, i, j, l, x, y, z);
67: pos[x][y][z] = '.';
68: }
69: }
70: }
71: while (1)
72: {
73: bool done = true;
74: orz(k, 6) orz(i, n) orz(j, n)
75: {
76: orz(l, n)
77: {
78: int x, y, z;
79: Get(k, i, j, l, x, y, z);
80: if (pos[x][y][z] == '.') continue;
81: else if (pos[x][y][z] == '#')
82: {
83: pos[x][y][z] = view[k][i][j];
84: break;
85: }
86: if (pos[x][y][z] == view[k][i][j]) break;
87: pos[x][y][z] = '.';
88: done = false;
89: }
90: }
91: if (done == true) break;
92: }
93: int res = 0;
94: orz(i, n) orz(j, n) orz(k, n)
95: if (pos[i][j][k] != '.') res += 1;
96: printf("Maximum weight: %d gram(s)\n", res);
97: }
98: return 0;
99: }
(P. S:弄出来之后感觉好有成就感Orz)
LA 2995 Image Is Everything 立方体成像 World Final 2004的更多相关文章
- LA 2995 立方体成像(模拟)
题目链接:https://vjudge.net/problem/UVALive-2995 这道题的主要难点在于三维坐标系的建立,然后在坐标系中进行迭代更新. 注意用宏定义来简化代码. AC代码: #i ...
- [ACM_模拟][ACM_数学] LA 2995 Image Is Everything [由6个视图计算立方体最大体积]
Description Your new company is building a robot that can hold small lightweight objects. The robo ...
- LA 2995 Image Is Everything
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- poj2196
Specialized Four-Digit Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7238 A ...
- ZOJ2405 Specialized Four-Digit Numbers 2017-04-18 20:43 44人阅读 评论(0) 收藏
Specialized Four-Digit Numbers Time Limit: 2 Seconds Memory Limit: 65536 KB Find and list all f ...
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...
- 数据立方体(Cube)
如上图所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方块)值,这些cell里面包含了要分析的数据,称之为度量值.显而易见,一组三维坐标唯一确定了一个子立方. 多位 ...
- 数据立方体----维度与OLAP
前面的一篇文章——数据仓库的多维数据模型中已经简单介绍过多维模型的定义和结构,以及事实表(Fact Table)和维表(Dimension Table)的概念.多维数据模型作为一种新的逻辑模型赋予了数 ...
- CSS3 3D立方体效果-transform也不过如此
CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...
随机推荐
- URAL 1183 Brackets Sequence(DP)
题目链接 题意 : 给你一串由括号组成的串,让你添加最少的括号使该串匹配. 思路 : 黑书上的DP.dp[i][j] = min{dp[i+1][j-1] (sh[i] == sh[j]),dp[i] ...
- Linux网络编程10——使用UDP实现五子棋对战
思路 1. 通信 为了同步双方的棋盘,每当一方在棋盘上落子之后,都需要发送给对方一个msg消息,让对方知道落子位置.msg结构体如下: /* 用于发给对方的信息 */ typedef struct t ...
- 深入理解javascript:揭秘命名函数表达式
这是一篇转自汤姆大叔的文章:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 前言 网上还没用发现有人对命名函数表达式进去重复深 ...
- java如何追加写入txt文件
java中,对文件进行追加内容操作的三种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.io.BufferedWriter; import ...
- intent传递参数
来建第一个Activity:MyIntent [mw_shl_code=java,true]public class MyIntent extends Activity { ...
- Linux进程间通信(IPC)
序言 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的. 而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心) ...
- Android核心分析 之十一Android GWES之消息系统
Android GWES之Android消息系统 ...
- 获取CentOS系统详情的九个uname命令实例
当你在控制台模式下,无法通过“鼠标右键 > 关于”获取操作系统的信息.这时,在Linux下,你可以使用uname命令,帮助你完成这些工作. Uname是unix name的缩写.在控制台中实际使 ...
- dataguru试听课程
http://www.dataguru.cn/article-5447-1.html#userconsent#
- BZOJ 3172 单词(ac自动机)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3172 题意:给出n个单词.输出每个单词在所有单词中一共出现多少次? 思路:首先将所有单词 ...