#P15930. [Roi2019 Regional]仓库自动化
[Roi2019 Regional]仓库自动化
某公司正在进行仓库自动化改造。仓库中有 种商品,编号为 到 ,每种商品存放在一个单独的房间中,商品 存放在编号为 的房间。
一个特殊机器人负责处理从仓库取货的请求。机器人要进入房间,需要使用对应房间的电子卡。所有电子卡按顺序放在机器人的卡槽中,机器人只能取出最上面的卡。
取出的卡可以被机器人放回卡槽中的任意位置:最上方、任意两张卡之间,或者最下方。
为了打开某个房间,机器人会不断取出卡并把它们放回卡槽,直到目标房间的卡位于最上方。然后机器人取出这张卡,用它打开房间,再将这张卡放回卡槽。如果为了打开该房间,机器人总共取出了 张卡,包括最终用于开门的那张卡,则称机器人进行了 次动作。
一天开始时,机器人收到一个取货订单,要求依次取出 件商品:
机器人必须严格按照这个顺序取货。初始时,卡槽中从上到下的卡顺序为:
每个房间恰好有一张卡。
机器人可以自行选择每次将取出的卡放回卡槽的哪个位置。请最小化完成整个订单所需的动作总数,并输出一种达到最优的放回方案。
输入格式
第一行包含两个整数 :
第二行包含 个整数:
表示需要依次取出的商品类型。
第三行包含 个互不相同的整数:
表示初始卡槽中从上到下的卡顺序。
输出格式
第一行输出一个整数 :完成订单所需的最小动作数。
接下来输出 个整数。对于机器人每一次取出的卡,输出它应被放回卡槽的位置:
- 若放回最上方,输出 ;
- 若放在一张卡之后,输出 ;
- 依此类推;
- 若放回最下方,输出 。
如果存在多种最优方案,输出任意一种。
样例 1 输入
1 1
1
1
样例 1 输出
1
1
样例 2 输入
4 5
4 1 2 4 4
4 3 2 1
样例 2 输出
7
4 4 2 4 4 1 4
样例 3 输入
2 2
1 2
2 1
样例 3 输出
3
2 2 2
样例说明
样例 2 中,卡槽变化如下:
| 动作 | 操作前卡槽 | 取出的卡 | 打开的房间 | 放回位置 | 操作后卡槽 |
|---|---|---|---|---|---|
| 1 | 4, 3, 2, 1 | 4 | 4 | 3, 2, 1, 4 | |
| 2 | 3, 2, 1, 4 | 3 | - | 2, 1, 4, 3 | |
| 3 | 2, 1, 4, 3 | 2 | 2 | 1, 2, 4, 3 | |
| 4 | 1, 2, 4, 3 | 1 | 4 | 2, 4, 3, 1 | |
| 5 | 2, 4, 3, 1 | 2 | 4, 3, 1, 2 | ||
| 6 | 4, 3, 1, 2 | 4 | 1 | ||
| 7 | 4 | 3, 1, 2, 4 | |||
子任务
| 子任务 | 分值 | 限制 | 依赖 | 检查信息 |
|---|---|---|---|---|
| 1 | 5 | ,且对所有 有 | - | 完全反馈 |
| 2 | 10 | ,且对所有 有 | ||
| 3 | 31 | 第一错误 | ||
| 4 | 14 | ,所有 互不相同 | 1, 2 | |
| 5 | 1, 2, 3, 4 | |||
| 6 | 26 | 1, 2, 3, 4, 5 |