【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 ...
随机推荐
- linux——系统内核参数优化
vim /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 999999 net.ipv4.tcp_max_tw_buckets = ...
- 理解微信小程序的生命周期和运行原理
写微信小程序,他的生命周期不能不知道,不知道小程序就会出现各种bug而无法解决.小助君公众号带你学习小程序的生命周期和运行原理. 小程序由两大线程组成:负责界面的线程(view thread)和服务线 ...
- APPlication,Session和Cookie的区别
方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟 ...
- java 程序编译和运行过程
java整个编译以及运行的过程相当繁琐,我就举一个简单的例子说明: Java程序从源文件创建到程序运行要经过两大步骤: 1.源文件由编译器编译成字节码(ByteCode): 2.字节码由java虚拟机 ...
- 用virtualenv建立独立虚拟环境 批量导入模块信息
pip3 install virtualenv mkdir env/env1 source bin/activate pip3 freeze >requirements.txt or pipre ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- JavaScript常见的代码精简
1.&& callback && callback() 等价于: if(callback){ callback(); } 表达的意思: 先判断 callback 是不是 ...
- Android App启动速度优化
解决在桌面上点击APP图标后经过一两秒后才显示页面,以及App启动后主界面显示过慢问题 一.应用的启动方式 1.冷启动:当启动应用时,后台没有该应用的进程,这时系统会首先会创建一个新的进程分配给该应用 ...
- CSS存在形式的引用
撰写个css文件 直接引用css文件样式的内容.本质是将css文件拿过来
- mybatis的简单使用调用mapper接口
mybatis 是apache下的一个面向sql编程的半自动化的ORM持久层的框架.特点:面向sql编程,达到高性能的使用目的. 下面是简单使用 现导入jar包,只有mybatis和数据库驱动包(这里 ...