1030 - Image Is Everything
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 ( 1
N
10 ). 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的更多相关文章
- BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]
1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3953 Solved: 1614[Submit][Stat ...
- PAT A 1030. Travel Plan (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1030 找最短路,如果有多条找最小消耗的,相当于找两次最短路,可以直接dfs,数据小不会超时. #incl ...
- Light OJ 1030 - Discovering Gold(概率dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1030 题目大意:有一个很长的洞穴, 可以看做是1-n的格子.你的起始位置在1的 ...
- Mysql: ERROR 1030 (HY000): Got error 28 from storage engine
今天帮同事解决一个问题的时候,遇到了下面的异常: ERROR 1030 (HY000): Got error 28 from storage engine 我们的数据库是mysql,我们的sql语句是 ...
- loj 1030概率dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 思路:一直以来对这种概率题都挺感冒的=.=......还是说一下思路吧,dp[i ...
- PAT乙级 1030. 完美数列(25)
1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...
- mysql 1030 Got error 28 from storage engine
mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth= ...
- 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 ...
- 【BZOJ】【1030】【JSOI2007】文本生成器
AC自动机/DP Orz ZYF 玛雅快要省选了,赶紧复(xue)习(xi)一下AC自动机…… 其实在AC自动机上DP并没有当初想的那么复杂……就是把DP的转移关系换成了AC自动机上的边而已(不过这题 ...
- PAT-乙级-1030. 完美数列(25)
1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...
随机推荐
- 小小换行符乱谈(文本文件vs二进制文件)
使用 C 语言的 fopen 打开文件时,可以指定的 mode 有 12 个,其中 6 个包含 "b" 使用 C++ 的 fstream 打开文件时,可用的模式组合有 24 个( ...
- python:利用asyncio进行快速抓取
web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...
- 将HDC保存为BMP文件
HDC在MSDN中的全称为:The handle of device context.通常,我们都是用来做相应的显示操作. 熟悉WIN32的朋友对于其应该不会陌生,经常采用GetDC,G ...
- IT第十九天 - 继承、接口、多态、面向对象的编程思想
IT第十九天 上午 继承 1.一般情况下,子类在继承父类时,会调用父类中的无参构造方法,即默认的构造方法:如果在父类中只写了有参的构造方法,这时如果在子类中继承时,就会出现报错,原因是子类继承父类时无 ...
- 【组队赛三】-C cf448B
Suffix Structures Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit S ...
- LINQ简单案例
1.在visual studio 创建一个解决方案,新建一个控制台程序Kong 2.新建两个类,分别为Master 类和Kongfu类 Master类中包含成员如下,并重写ToString方法 na ...
- gpexpand error:Do not have enough valid segments to start the array.
gpstart error: Do not have enough valid segments to start the array. 这个时候需要检查一下shared_buffers设置改小点,就 ...
- pl/sql 中F8执行单行sql
pl/sql中设置: tools->preferences->sql window->AutoSelect statement
- modelsim中的文件操作—— 大数据测试
在modelsim中不可避免的需要进行文件操作,在窗口中查看代码的操作情况,下面是我自己M序列实验中的一段测试代码 integer i,j ,k,m; integer m_dataFILE , ind ...
- Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)
已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...