LA 6621 /ZOJ 3736 Pocket Cube 打表+暴力
这道题是长沙区域赛的一道简单题,当时题目在ZOJ重现的时候就做了一次,但是做的好复杂,用的BFS暴力,而且还没打表,最后还是莫名其妙的爆栈错误,所以就一直没弄出来,昨天做到大白书上例题05年东京区域赛的一道类似题 Colored Cubes,这类题都需要脑补一下立方体的旋转总共有几种状态,然后用函数或者手工打表来记叙每一次变化之后的立方体变化
这道题从编号开始就给了我们很大便利,从0-23,读入数据也是按照这个来,很方便。我是手工打的表,说实话,魔方的转动还是有点复杂,我还真不知道用函数怎么打出表来。
吐血的是我一开始脑子居然觉得只有4种旋转方式,其实有6种,当然不考虑对应面的旋转,否则就有12种了,很好理解,魔方的一个面顺时针或者逆时针旋转,就相当于对应面的反向运动,因此6个面只需考虑三个面,由此打好表,然后用DFS进行下搜索即可。。。不得不说一下一旦用到DFS剪枝的重要性,由于魔方旋转过程中,可能出现转过去又转回来的情况,但其实是做了无用功,因此可以简单的判断一下是否又转了回来,这样子时间复杂度一下从1000+降到了300+。
#include <iostream>
#include <cstdio>
#include <cstring>
int clocks[][]={
{,,,,,,,,,,,,,
,,,,,,,,,,},
{,,,,,,,,,,,,,
,,,,,,,,,,},
{,,,,,,,,,,,,,
,,,,,,,,,,},
{,,,,,,,,,,,,,
,,,,,,,,,,},
{,,,,,,,,,,,,,
,,,,,,,,,,},
{,,,,,,,,,,,,,,
,,,,,,,,,},
};
int cuba[],n,ans;
int r[];
inline int max(int a,int b)
{
if (a>b) return a;
else return b;
}
int judge(int* t)
{
int flag,tot;
tot=;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
flag=t[];
if (flag!=t[]||flag!=t[]||flag!=t[])
tot--;
return tot;
}
void solve(int x)
{
int temp[],i,j;
memcpy(temp,cuba,sizeof (cuba));
for (i=;i<x;i++)
{
int tt[];
memcpy(tt,temp,sizeof (temp));
for (j=;j<;j++)
{
temp[j]=tt[clocks[r[i]][j]];
}
}
ans=max(ans,judge(temp));
}
void dfs(int x)
{
if (ans==) return;
solve(x);
if (x==n) return;
else
{
for (int i=;i<;i++)
{
if (x> && i==r[x-] && i==r[x-] && i==r[x-]) //这个和下面那句都是剪枝条件,尤其是下面那句剪枝效果明显,避免重复的搜索。
continue;
if (x> && (i^)==r[x-])
continue;
r[x]=i;
dfs(x+);
}
}
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
for (int i=;i<;i++)
scanf("%d",&cuba[i]);
ans=;
memset(r,,sizeof r);
dfs();
printf("%d\n",ans);
}
return ;
}
LA 6621 /ZOJ 3736 Pocket Cube 打表+暴力的更多相关文章
- 模拟 ZOJ 3736 Pocket Cube
题目传送门 题意:魔方最多旋转n次,问最多能使多少面颜色相同 分析:6种状态(3种旋转方式*顺逆方向,其他对称的!),首先先打个表,然后很愉快的DFS.自己写的时候费劲脑汁,代码很长,还TLE了... ...
- 2013区域赛长沙赛区现场赛 K - Pocket Cube
K - Pocket Cube Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- ZOJ 2477 Magic Cube(魔方)
ZOJ 2477 Magic Cube(魔方) Time Limit: 2 Seconds Memory Limit: 65536 KB This is a very popular gam ...
- Pocket Cube
Pocket Cube http://acm.hdu.edu.cn/showproblem.php?pid=5983 Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 5292 Pocket Cube 结论题
Pocket Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5292 Description Pocket Cube is the 2×2× ...
- 【】【】Pocket Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...
- 【HDOJ】4801 Pocket Cube 的几种解法和优化
1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...
- ZOJ 3622 Magic Number 打表找规律
A - Magic Number Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Subm ...
- POJ 1595 Prime Cuts (ZOJ 1312) 素数打表
ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=312 POJ:http://poj.org/problem?id=159 ...
随机推荐
- poi 导出Excel java代码
js: function initBatchExport(url,sub_key,current_sub_num){ var btn_id="#btn_char"+current_ ...
- Elasticsearch 删除文档
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- selenium2Library无法启动chrome
使用其他浏览器都没有影响,唯独chrome启动不起来,去掉IE-连接-局域网设置-自动检测设置就OK了
- 数据库的交互模式 常用的dos命令 (第一天)
浏览器和服务器和数据库的交互模式 windows nt(windows系统)的分类:服务操作系统有(server03 server08(R2) 12 16) 个人操作系统有(xp win7 win8 ...
- POJ 1028:Web Navigation
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 30828 Accepted: 13821 ...
- # vim ~/.vimrc vim配色
Ubuntu # vim ~/.vimrc # /hom/zzx 下 set nomodeline "(这个一定要写,目前有这个安全漏洞) set ...
- SPFA--P3905 道路重建
题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有d条道路被破坏了.国王想要修复国家的道路系统,现在有两个重要城市A和B ...
- Flink并行度
并行执行 本节介绍如何在Flink中配置程序的并行执行.FLink程序由多个任务(转换/操作符.数据源和sinks)组成.任务被分成多个并行实例来执行,每个并行实例处理任务的输入数据的子集.任务的并行 ...
- Bandwagon 安装 Mysql 数据库
Bandwagon 安装 Mysql 数据库 1.搬瓦工系统准备 建议使用版本Centos6 x86_64,安装完成后,使用远程登陆软件登陆. 2.安装编译工具及库文件 yum -y install ...
- 寒假day19
今天编写了人才动态模块,同时刷了一些算法题.