有一个 n * n * n 的立方体,其中一些单位立方体已经缺失(剩下部分不一定连通)。每个单位立方体重 1 克,且被涂上单一的颜色(即 6 个面的一颜色相同)。给出前、左、后、右、顶、底 6 个视图,你的任务是判断这个屋里剩下的最大的重量。
看完这题之后,我满头雾水,不知道从何下手。后来模拟了一下数据,才知道怎么解决。
首先,一个单位立方体只有一种颜色,如果从不同的视图看到这个立方体的颜色不同,那么就删除这个立方体。通过这样循环删除,到最后所有的小立方体都符合题目所要求,就是最大的立方体数目,即最大的重量。
附AC代码:
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <cstdarg>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <list>
#include <vector>
#include <map>
long
sizeof(a))
int i = 0; i < k; i++)
namespace std;
int n;
int count, ...)
18: {
19: va_list arg_ptr;
20: va_start (arg_ptr, count);
int i = 0; i < count; i++)
int*));
23: va_end(arg_ptr);
24: }
char Input()
26: {
char ch;
while (1)
29: {
30: ch = getchar();
return ch;
return ch;
33: }
34: }
35:
int &z)
37: {
switch (k)
39: {
break;
break;
break;
break;
break;
break;
46: }
47: }
48:
char pos[10][10][10];
char view[6][10][10];
int main()
52: {
, &n) && n)
54: {
55: Clean(1, view);
56:
57: orz(i, n) orz(j, 6) orz(k, n) view[j][i][k] = Input();
'#';
59: orz(k, 6) orz(i, n) orz(j, n)
60: {
'.')
62: {
63: orz(l, n)
64: {
int x, y, z;
66: Get(k, i, j, l, x, y, z);
'.';
68: }
69: }
70: }
while (1)
72: {
bool done = true;
74: orz(k, 6) orz(i, n) orz(j, n)
75: {
76: orz(l, n)
77: {
int x, y, z;
79: Get(k, i, j, l, x, y, z);
continue;
'#')
82: {
83: pos[x][y][z] = view[k][i][j];
break;
85: }
break;
'.';
88: done = false;
89: }
90: }
break;
92: }
int res = 0;
94: orz(i, n) orz(j, n) orz(k, n)
'.') res += 1;
, res);
97: }
return 0;
99: }