【FZSZ2017暑假提高组Day1】华容道游戏
【问题描述】
华容道是一种有趣的滑块游戏,大概是下面这个样子的。

游戏局面由一个2*2的曹操滑块,五个2*1的蜀将滑块(横竖是不定的)、四个1*1的小兵滑块以及两个空的位置构成,玩家需要利用空的位子移动滑块,使得曹操逃离华容道,即使得滑块到达最下面一行的正中间,如上面的第二张图所示。
在游戏过程中,任意一个滑块均不可以旋转或跳跃,在任意时刻都不可以分割,滑块之间不能重叠,这也就是说,游戏过程中,我们只能利用局面中的两个空位来平移各个滑块。
举个例子,在上图中,第一张图的曹操可以往下移,关羽可以往上移,从上往下数第四行的小兵也可以往左移动,而对于第三张图,曹操可以往下移,第四行的小兵可以向左移,最后一行的小兵可以先向上移动、再向右移动,然而在该局面下,左边的马超不可以向右平移。
为了方便,我们记一步为使某个滑块平移一个单位的距离,比如在上面第一张图中,将曹操往下平移和将关羽往上平移都记为一步,而第四行第三列的小兵如果移动到第四行第一列,那么就算作两步,同样,第二幅图中的马超如果往下移到底,这个过程也算作两步。
现在,给定一个局面,你的任务就是用最少的步数使得曹操逃离华容道,如果无法做到这一点,那么便输出-1。
【输入格式】
第一行一个正整数T,表示数据组数。
接下来T组数据,每组数据5行,每行4个数,描述待求解的华容道的局面。其中,0表示空位,1表示小兵,2表示曹操,3到7五个数字分别表示五个蜀将的滑块,每个数字出现的位置就表示这个滑块在局面中占据的位置,两组相邻数据间用一空行隔开。
【输出格式】
对每组数据输出一行一个整数,表示使得曹操逃离华容道的最少步数,或者一个-1表示曹操无法逃离华容道。
【样例输入】
3
3 3 1 4
5 6 1 4
5 6 7 7
0 2 2 1
0 2 2 1
3 3 4 4
5 5 6 6
1 1 7 7
1 0 2 2
1 0 2 2
3 2 2 4
3 2 2 4
5 6 6 7
5 1 1 7
1 0 0 1
【样例输出】
0
1
116
【数据规模与约定】
对于40%的数据,T=1。
对于60%的数据,T<=2。
对于80%的数据,T<=3。
对于100%的数据,1<=T<=4,所给局面中一定有两个0,四个1,2所占据的位置一定是一个2*2正方形,3到7每个数字均各自占据相邻的两格(不保证每个数字占据的两格是横的还是竖的)。
题目分析
首先这出题者是谁?你出来我保证不打死你。我们做题之前先来了解一下华容道是什么?和2048有点像,需要让CC在最快的时间内到达最下方的中间位置。这个棋盘是4*5的,我们的人物有CC,五虎将云长翼德子龙孟起和汉升,最后是四个小兵我们叫他们伯常仲常季常和叔常。现在三国的故事线完整了,虽然在赤壁大战时,孟起和汉升都不在,但这不是重点,我博学多才,精通高等数学高等生物,饱读诗书,如果你不知道X常是谁,没关系,幼常是那个挥泪的,懂了吧。
这一题看到就知道是爆搜了,怎么搜呢?map压缩状态记忆化即可,想起来我没有说过记忆化,真是抱歉啊。以后我还会写一下dancing line算法,我立FLAG在这里。我们发现问题的关键在关羽,因为关羽是最难走的。这是一道非常恶心变态的模拟题加搜索,NOI第二题难度。这一题原来是NOIP2013的第六题。
代码实现
你们不会想看我的代码的,我是面向数据编程。
代码分析
OK,我现在知道怎么写这一题了,这是一道迭代加深搜索题。中间状压加估值函数。
本来要写一些别的,我这么窝囊,不敢写了。
【FZSZ2017暑假提高组Day1】华容道游戏的更多相关文章
- 【FZSZ2017暑假提高组Day1】确定小组
[问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...
- 【FZSZ2017暑假提高组Day1】最大矩形
[问题描述] 现在有n个宽度为1的矩形按如下图(左边的)所示的方式排在了一起: 用肉眼容易看出,在左图内部面积最大的矩形如右图绿色部分所标注. 现在我们考虑将其中一些宽度为1的矩形取出,按照原顺序再次 ...
- [NOIP2011提高组day1]-3-mayan游戏
3.Mayan 游戏 (mayan.cpp/c/pas) [问题描述] Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...
- 【FZSZ2017暑假提高组Day2】圆盘时钟
[问题描述] 作为出题人的小Z相信大家对上图这样的圆盘时钟都不会陌生——在理想圆盘时钟上,秒针每一分钟转一圈,分针每一小时转一圈,时针每12小时转一圈,它们均是匀速转动的,在0点时三条针均指向表盘上的 ...
- Noip2011 提高组 Day1 T3 Mayan游戏
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- GZOJ 1361. 国王游戏【NOIP2012提高组DAY1】
国王游戏[NOIP2012提高组DAY1] Time Limit:1000MS Memory Limit:128000K Description 国王游戏(game.cpp/c/pas) [问题描述] ...
- 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏
Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...
- luogu1003铺地毯[noip2011 提高组 Day1 T1]
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- 18/9/9牛客网提高组Day1
牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30% qwq #include<algorithm> #in ...
随机推荐
- JAVA学习笔记系列3-JVM、JRE和JDK的区别
JVM(Java Virtual Machine)就是一个虚拟的用于执行bytecode字节码的“虚拟计算机”.它和os打交道 JRE(Java Runtime Environment)包含:Java ...
- 自动化测试-12.selenium的弹出框处理
前言 不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决. alert\confirm\prompt ...
- oracle 如何查询/修改dmp文件的字符集
1.如何查询dmp文件的字符集 用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集.如果dmp文件不大,比如只有几M或几十M,可以用Ul ...
- Introduction of filter in servlet
官方给出的Filter的定义是在请求一个资源或者从一个资源返回信息的时候执行过滤操作的插件.我们使用过滤起最多的场景估计就是在请求和返回时候的字符集转换,或者权限控制,比如一个用户没有登录不能请求某些 ...
- html框架以及属性字体应用
今日java开课,下午老师讲解了java的第一节课,有关于html的框架,为了自己方便以后也会在日记中添加一些便签方便自己使用. 了解这一些之后老师发布的作业也让我对码代码有了更深的认知,码完作业之后 ...
- python 0,1行列问题
shape[0]-- 行 A.min(0) --A的按列最小值,生成一个行向量 >>> a = np.random.rand(3,3) >>> a array([[ ...
- java android 捕获未处理异常
1. 定义一个异常处理类 public class ExceptionHandler implements Thread.UncaughtExceptionHandler { public Excep ...
- 第十一章 IO流
11.IO流 11.1 java.io.File类的使用 1课时 11.2 IO原理及流的分类 1课时 11.3 节点流(或文件流) 1课时 11.4 缓冲流 1课时 11.5 转换流 1课时 11. ...
- 【转】利用Boost.Python将C++代码封装为Python模块
用Boost.Python将C++代码封装为Python模块 一. 基础篇 借助Boost.Python库可以将C/C++代码方便.快捷地移植到python模块当中,实现对python模块的扩 ...
- centos7启动过程及systemd详细说明
开机启过程 POST->BOOT SEQUENCE-> BOOTLOADER->KERNEL + INITRAMFS(INITRD)->ROOTFS->/sbin/ini ...