Your new company is building a robot that can hold small lightweight objects. The robot will have the intelligence to determine if an object is light enough to hold. It does this by taking pictures of the object from the 6 cardinal directions, and then inferring an upper limit on the object's weight based on those images. You must write a program to do that for the robot.

You can assume that each object is formed from an N×N×N lattice of cubes, some of which may be missing. Each 1×1×1 cube weighs 1 gram, and each cube is painted a single solid color. The object is not necessarily connected.

Input

The input for this problem consists of several test cases representing different objects. Every case begins with a line containing  N , which is the size of the object (   1N10 ). The next  N  lines are the different N×N  views of the object, in the order front, left, back, right, top, bottom. Each view will be separated by a single space from the view that follows it. The bottom edge of the top view corresponds to the top edge of the front view. Similarly, the top edge of the bottom view corresponds to the bottom edge of the front view. In each view, colors are represented by single, unique capital letters, while a period ( . ) indicates that the object can be seen through at that location.

Input for the last test case is followed by a line consisting of the number 0.

Output

For each test case, print a line containing the maximum possible weight of the object, using the format shown below.

Sample Input

3
.R. YYR .Y. RYY .Y. .R.
GRB YGR BYG RBY GYB GRB
.R. YRR .Y. RRY .R. .Y.
2
ZZ ZZ ZZ ZZ ZZ ZZ
ZZ ZZ ZZ ZZ ZZ ZZ
0

Sample Output

Maximum weight: 11 gram(s)
Maximum weight: 8 gram(s)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MaxN=10+5;
char g1[MaxN][MaxN],g2[MaxN][MaxN],g3[MaxN][MaxN],g4[MaxN][MaxN],g5[MaxN][MaxN],g6[MaxN][MaxN];
int p1[MaxN][MaxN],p2[MaxN][MaxN],p3[MaxN][MaxN],p4[MaxN][MaxN],p5[MaxN][MaxN],p6[MaxN][MaxN];
int g[MaxN][MaxN][MaxN];
int n; void init();
void work();
bool update_front();
bool update_left();
bool update_back();
bool update_right();
bool update_top();
bool update_bottom(); int main()
{
for(;;)
{
scanf("%d",&n);
if(n==0) break;
init();
work();
}
return 0;
} void init()
{
for(int i=0;i<n;++i)
scanf("%s %s %s %s %s %s",g1[i],g2[i],g3[i],g4[i],g5[i],g6[i]);
} void work()
{
fill(p1[0],p1[n],0);fill(p2[0],p2[n],0);fill(p3[0],p3[n],0);
fill(p4[0],p4[n],0);fill(p5[0],p5[n],0);fill(p6[0],p6[n],0);
fill(g[0][0],g[n][0],-1);
for(;;)
{
bool quit=true;
if(update_front()) quit=false;
if(update_left()) quit=false;
if(update_back()) quit=false;
if(update_right()) quit=false;
if(update_top()) quit=false;
if(update_bottom()) quit=false;
if(quit) break;
}
int ans=n*n*n;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
for(int k=0;k<n;++k)
if(g[i][j][k]==0) --ans;
printf("Maximum weight: %d gram(s)\n",ans);
} bool update_front()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p1[i][j];
char ch=g1[i][j];
if(t==n) continue;
int &val=g[n-t-1][j][i];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
} bool update_left()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p2[i][j];
char ch=g2[i][j];
if(t==n) continue;
int &val=g[j][t][i];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
} bool update_back()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p3[i][j];
char ch=g3[i][j];
if(t==n) continue;
int &val=g[t][n-j-1][i];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
} bool update_right()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p4[i][j];
char ch=g4[i][j];
if(t==n) continue;
int &val=g[n-j-1][n-t-1][i];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
} bool update_top()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p5[i][j];
char ch=g5[i][j];
if(t==n) continue;
int &val=g[i][j][t];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
} bool update_bottom()
{
bool upd=false;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
{
int &t=p6[i][j];
char ch=g6[i][j];
if(t==n) continue;
int &val=g[n-i-1][j][n-t-1];
if(val==0)
{
++t;
upd=true;
}
else if(ch=='.')
{
val=0;
++t;
upd=true;
}
else if(val==-1)
{
val=ch-'A'+1;
upd=true;
}
else if(val!=ch-'A'+1)
{
val=0;
++t;
upd=true;
}
}
return upd;
}

1030 - Image Is Everything的更多相关文章

  1. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3953  Solved: 1614[Submit][Stat ...

  2. PAT A 1030. Travel Plan (30)【最短路径】

    https://www.patest.cn/contests/pat-a-practise/1030 找最短路,如果有多条找最小消耗的,相当于找两次最短路,可以直接dfs,数据小不会超时. #incl ...

  3. Light OJ 1030 - Discovering Gold(概率dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1030 题目大意:有一个很长的洞穴, 可以看做是1-n的格子.你的起始位置在1的 ...

  4. Mysql: ERROR 1030 (HY000): Got error 28 from storage engine

    今天帮同事解决一个问题的时候,遇到了下面的异常: ERROR 1030 (HY000): Got error 28 from storage engine 我们的数据库是mysql,我们的sql语句是 ...

  5. loj 1030概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 思路:一直以来对这种概率题都挺感冒的=.=......还是说一下思路吧,dp[i ...

  6. PAT乙级 1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  7. mysql 1030 Got error 28 from storage engine

    mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth= ...

  8. hdu 1030 Delta-wave (C++, 0ms, explanatory comments.) 分类: hdoj 2015-06-15 12:21 45人阅读 评论(0) 收藏

    problem description http://acm.hdu.edu.cn/showproblem.php?pid=1030 #include <cstdio> #include ...

  9. 【BZOJ】【1030】【JSOI2007】文本生成器

    AC自动机/DP Orz ZYF 玛雅快要省选了,赶紧复(xue)习(xi)一下AC自动机…… 其实在AC自动机上DP并没有当初想的那么复杂……就是把DP的转移关系换成了AC自动机上的边而已(不过这题 ...

  10. PAT-乙级-1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

随机推荐

  1. Android 一个改进的okHttp封装库

    一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...

  2. 强大的Mockito测试框架(转)

    1.自动生成Mock类在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.i ...

  3. C++一些注意点之异常处理

    几篇文章:(1)http://blog.csdn.net/daheiantian/article/details/6530318 (2)http://blog.chinaunix.net/uid-21 ...

  4. 查看一个int数组里边的每个数字出现过几次

    public void aa() { int[] a = { 1, 2, 3, 4, 5, 4, 3, 2, 1 }; Hashtable ht = new Hashtable(); for (int ...

  5. WinForm界面中快捷键设置

    这是对整个界面的快捷键的设置,比如查询,保存. 1 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if ...

  6. ZOJ 3607 Lazier Salesgirl 贪心

    这个题比上个题简单得多,也是超过W时间会睡着,睡着就再也不会卖了,顾客按时间顺序来的,但是可能有顾客同时到(同时到如果醒着就全卖了),并且每个人只买一块面包,也是求最大的W,使得卖出面包的平均价格最高 ...

  7. python读写zip文件

    zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]]) fileName是没有什么疑问的了. mode和一般的文件操作一样,'r' ...

  8. Week13(12月2日):又到了那个点,期末了~~~~

    Part I:提问 =========================== 1.ASP.NET MVC是微软.NET平台上的一个(      ). A.语言    B.集成开发环境    C.Web开 ...

  9. Qt5程序开机自启动(windows)

    简介 window下开机启动最简单的实现方式就是在注册表中添加启动项目 添加位置有两个 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer ...

  10. Clojure学习03:数据结构(集合)

    Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  & ...