有一个 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: }

相关文章: