luogu#P11497. [ROIR 2019 Day 1] 自动仓库

[ROIR 2019 Day 1] 自动仓库

题目背景

翻译自 ROIR 2019 D1T3

题目描述

公司正在进行仓库自动化。仓库里存放着 nn 种商品,编号从 11nn,每种商品存放在一个独立的房间里。编号为 ii 的商品存放在编号为 ii 的房间里。

一个机器人负责从仓库取货。机器人使用特殊的电子卡片进入仓库的房间。卡片在机器人的一个专用卡槽中。机器人可以从卡槽中取出最前端的卡片。取出的卡片可以放回卡槽中的任意位置

为了进入一个房间,机器人按以下步骤操作:

  • 从卡槽中取出一个卡片,并放回卡槽中。
  • 重复这样的操作,直到卡槽最前端的卡片是它需要进入的房间的卡片。
  • 然后,取出这张卡片,使用它进入房间,并将其放回卡槽中。

如果机器人总共取出了 xx 张卡片(包括最终打开房间的那张),我们说机器人为了进入这个房间进行了 xx 次操作。

现在,机器人需要按顺序取出 mm 件商品 a1,a2,,ama_{1}, a_{2}, \dots, a_{m}。最初,电子卡片在卡槽中的顺序为 b1,b2,,bnb_{1}, b_{2}, \dots, b_{n}。每个房间的卡片在卡槽中恰好有一张。

取出商品所需的时间取决于机器人进入对应房间需要的操作次数。为了让机器人更快取出所有商品,你需要确定机器人放回取出卡片的位置,以最小化机器人的总操作次数。

输入格式

第一行输入两个整数 nnmm,表示商品种类数和需要从仓库取出的商品数。

第二行输入 mm 个整数 a1,a2,,ama_{1}, a_{2}, \dots, a_{m},表示需要按顺序取出的商品。

第三行输入 nn 个不同的整数 b1,b2,,bnb_{1}, b_{2}, \dots, b_{n},表示卡片在卡槽中的初始顺序。

输出格式

第一行输出一个整数 kk,表示机器人需要的最小操作次数。

第二行输出 kk 个整数,即对于机器人的每次操作,需要将取出的卡片放回卡槽中的位置(从前到后的位置编号为 11nn,也就是将其放回后这个卡片在卡槽中的位置编号)。

如果有多种方法可以最小化总操作次数,可以输出任意一种。

1 1
1
1
1
1
4 5
4 1 2 4 4
4 3 2 1
7
4 4 2 4 4 1 4
2 2
1 2
2 1
3
2 2 2

提示

样例解释

样例 22 的所有操作如下:

操作 操作前 取出的卡片 打开的房间 卡片放回的位置 操作后
11 4,3,2,1\mathbf{4}, 3 , 2 , 1 44 44 3,2,1,43,2,1, \mathbf{4}
22 3,2,1,4\mathbf{3}, 2, 1, 4 33 - 2,1,4,32,1,4, \mathbf{3}
33 2,1,4,3\mathbf{2} , 1 , 4 , 3 22 22 1,2,4,31, \mathbf{2} , 4 , 3
44 1,2,4,3\mathbf{1} , 2 , 4 , 3 11 44 2,4,3,12,4,3, \mathbf{1}
55 2,4,3,1\mathbf{2} , 4 , 3 , 1 22 4,3,1,24,3,1, \mathbf{2}
66 4,3,1,2\mathbf{4}, 3, 1, 2 44 11 4,3,1,2\mathbf{4} , 3 , 1 , 2
77 4,3,1,2\mathbf{4} , 3 , 1 , 2 44 3,1,2,43,1,2,\mathbf{4}

数据范围

数据中 Subtask 0 为样例。

子任务 分值 特殊性质
11 55 1n=m51041 \leq n=m \leq 5 \cdot 10^{4}ai=bia_i=b_i
22 1010 1n=m51041 \leq n= m \leq 5 \cdot 10^{4}ai=bni+1a_i=b_{n-i+1}
33 3131 1n,m20001 \leq n, m \leq 2000
44 1414 1n,m51041 \leq n, m \leq 5 \cdot 10^{4},所有 aia_{i} 不同
55 1n5104,1m1051 \leq n \leq 5 \cdot 10^{4}, 1 \leq m \leq 10^{5}
66 2626 $1 \leq n \leq 3 \cdot 10^{5}, 1 \leq m \leq 3 \cdot 10^{5}$