【问题描述】

华容道是一种有趣的滑块游戏,大概是下面这个样子的。

游戏局面由一个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】华容道游戏的更多相关文章

  1. 【FZSZ2017暑假提高组Day1】确定小组

    [问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...

  2. 【FZSZ2017暑假提高组Day1】最大矩形

    [问题描述] 现在有n个宽度为1的矩形按如下图(左边的)所示的方式排在了一起: 用肉眼容易看出,在左图内部面积最大的矩形如右图绿色部分所标注. 现在我们考虑将其中一些宽度为1的矩形取出,按照原顺序再次 ...

  3. [NOIP2011提高组day1]-3-mayan游戏

    3.Mayan 游戏 (mayan.cpp/c/pas) [问题描述] Mayan puzzle 是最近流行起来的一个游戏.游戏界面是一个 7行 5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即 ...

  4. 【FZSZ2017暑假提高组Day2】圆盘时钟

    [问题描述] 作为出题人的小Z相信大家对上图这样的圆盘时钟都不会陌生——在理想圆盘时钟上,秒针每一分钟转一圈,分针每一小时转一圈,时针每12小时转一圈,它们均是匀速转动的,在0点时三条针均指向表盘上的 ...

  5. Noip2011 提高组 Day1 T3 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  6. GZOJ 1361. 国王游戏【NOIP2012提高组DAY1】

    国王游戏[NOIP2012提高组DAY1] Time Limit:1000MS Memory Limit:128000K Description 国王游戏(game.cpp/c/pas) [问题描述] ...

  7. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  8. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  9. 18/9/9牛客网提高组Day1

    牛客网提高组Day1 T1 中位数 这好像是主席树??听说过,不会啊... 最后只打了个暴力,可能是n2logn? 只过了前30%  qwq #include<algorithm> #in ...

随机推荐

  1. php中wampserver多站点配置

    1.修改默认端口 : 2.添加多站点: 3.在文件的结尾添加一个站点配置: <VirtualHost *:8080> ServerAdmin webmaster@duoduo.com Do ...

  2. 获取Ueditor里面的图片列表,地址绝对化

    /**     * 内容中图片地址转成绝对地址     * @param $content     * @return mixed     */    private function imgUrl( ...

  3. iOS 添加第三方字体

    有时候根据UI的设计,我们需要添加第三方字体到工程中,实现特殊的效果. 一,把第三方字体包导入工程 二,在info.plist文件中添加Fonts provided by application 类型 ...

  4. escu问题及解决

    ************************************************************** Qt 出现“undefined reference to `vtable ...

  5. matplotlib画sin(x)和cos(x)/2

    import matplotlib.pyplot as mp 1. 基本的绘图 mp.plot(水平坐标, 垂直坐标, linestyle=线型, linewidth=线宽, color=颜色, .. ...

  6. 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 ...

  7. 使用centos7构建本地git服务器

    git的安装非常简单 直接yum install git -y即可 大概看一下我的执行步骤吧 首先在服务器上执行以下操作,完成创建仓库 mkdir -p /data/test/bp.git #创建仓库 ...

  8. goaccess 通过jsonpath 转换为prometheus metrics

    goaccess 是一个不错的日志分析工具,包含了json 数据同时支持基于websocket 的实时数据处理,当然我们可以通过jsonpath 的exporter 转换为支持promethues 的 ...

  9. CANVAS笔记

    bglayer.add(bgimage) /*后面的层会覆盖前面的,所以要放在上面的,就要后面才添加!*/ bglayer.add(this.shape1) Layer.destroy() layer ...

  10. Java继承(下)

    Object类 在www.oracle中找到java 中的java.lang在中找到object类中找到可以看到在java语言中的定义 如何修改object中的equals类及测试 在object中类 ...