【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 ...
随机推荐
- php中wampserver多站点配置
1.修改默认端口 : 2.添加多站点: 3.在文件的结尾添加一个站点配置: <VirtualHost *:8080> ServerAdmin webmaster@duoduo.com Do ...
- 获取Ueditor里面的图片列表,地址绝对化
/** * 内容中图片地址转成绝对地址 * @param $content * @return mixed */ private function imgUrl( ...
- iOS 添加第三方字体
有时候根据UI的设计,我们需要添加第三方字体到工程中,实现特殊的效果. 一,把第三方字体包导入工程 二,在info.plist文件中添加Fonts provided by application 类型 ...
- escu问题及解决
************************************************************** Qt 出现“undefined reference to `vtable ...
- matplotlib画sin(x)和cos(x)/2
import matplotlib.pyplot as mp 1. 基本的绘图 mp.plot(水平坐标, 垂直坐标, linestyle=线型, linewidth=线宽, color=颜色, .. ...
- LeetCode - X of a Kind in a Deck of Cards
In a deck of cards, each card has an integer written on it. Return true if and only if you can choos ...
- 使用centos7构建本地git服务器
git的安装非常简单 直接yum install git -y即可 大概看一下我的执行步骤吧 首先在服务器上执行以下操作,完成创建仓库 mkdir -p /data/test/bp.git #创建仓库 ...
- goaccess 通过jsonpath 转换为prometheus metrics
goaccess 是一个不错的日志分析工具,包含了json 数据同时支持基于websocket 的实时数据处理,当然我们可以通过jsonpath 的exporter 转换为支持promethues 的 ...
- CANVAS笔记
bglayer.add(bgimage) /*后面的层会覆盖前面的,所以要放在上面的,就要后面才添加!*/ bglayer.add(this.shape1) Layer.destroy() layer ...
- Java继承(下)
Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...