#P1194. 推箱入库
显示设置
本题导航点一下展开
我的笔记
✕
推箱入库
题目背景
老仓库是一排细长的货位。货位窄得转身都难,管理员只能在箱子之间侧着身子挪动,箱子一旦被推出去就再也拉不回来。
题目描述
仓库由 个货位排成一排,从左到右编号 到 。货位里放着 个箱子,第 个箱子一开始放在 号货位上,保证 。管理员一开始站在 号货位上,保证这个货位上没有箱子。
管理员每走一步,可以做下面两件事之一:
- 走动:走到相邻的一个货位,要求这个货位在仓库里,并且没有箱子;
- 推箱:如果管理员正前方相邻的那个货位上有箱子,而箱子正前方相邻的那个货位在仓库内且没有箱子,那么管理员向前走一步,箱子同时被推到那个空货位上。
箱子只能被推,不能被拉回来;箱子也不能被推到另一个箱子上,或者推到仓库外面去。
管理员希望最终被箱子占住的货位集合恰好等于给定的目标集合。请你求出他最少需要走多少步。如果无论怎么走都做不到,输出 -1。
输入格式
第一行三个整数 。
第二行 个递增的整数 ,表示箱子的初始位置。
第三行 个递增的整数 ,表示目标集合。
输出格式
输出一行一个整数,表示最少步数;如果做不到则输出 -1。
输入输出样例 #1
输入 #1
8 2 4
2 7
1 7
输出 #1
2
输入输出样例 #2
输入 #2
8 2 4
2 7
2 8
输出 #2
3
输入输出样例 #3
输入 #3
8 2 4
2 7
1 5
输出 #3
-1
说明
样例解释
三个样例的初始局面相同:两只箱子分别在 号和 号货位上,管理员站在 号货位上。
- 样例 1 的目标是让箱子落在 号、 号货位。管理员退到 号货位,再把 号货位上的箱子推到 号货位,一共 步。
- 样例 2 的目标是 号、 号货位。管理员走到 号货位用 步,再把 号货位上的箱子推到 号货位,一共 步。
- 样例 3 要求 号货位上的箱子落到 号货位,这必须由管理员站在箱子右侧把它向左推。但管理员被这只箱子挡在左边,两只箱子之间的空隙又不允许他从旁边绕过去,所以他永远到不了箱子的右侧;如果改从左边把它往右推,箱子只会离 号货位越来越远。
数据范围
| 测试点编号 | 特殊性质 | ||
|---|---|---|---|
| 无 | |||
对于 的数据:,,, 与所有 都不相同,目标集合中的 个货位互不相同。