你是一名负责运输爆炸物的爆炸物处理员。在一条直线上有 $n$ 个工厂和 $n$ 个矿场。工厂生产爆炸物,而矿场需要爆炸物。
每个工厂生产 1 单位爆炸物,每个矿场需要 1 单位爆炸物。第 $i$ 个工厂($1 \le i \le n$)位于位置 $a[i]$,第 $j$ 个矿场($1 \le j \le n$)位于位置 $b[j]$。所有工厂和矿场的位置各不相同(即 $a[1 \dots n], b[1 \dots n]$ 互不相同)。
作为爆炸物处理员,你驾驶一辆最多可装载 $c$ 单位爆炸物的卡车。你从位置 0 出发,初始时卡车内没有爆炸物。你的目标是将所有爆炸物从工厂运送到矿场。
具体来说,你可以执行以下操作:
pickup(x):从当前位置行驶到位于 $x$ 的工厂,并从该工厂拾取 1 单位爆炸物。仅在满足以下条件时允许执行此操作:- $x = a[i]$(对于某个 $1 \le i \le n$)
你的卡车内最多装有 $c - 1$ 单位爆炸物。
此操作使卡车内的爆炸物数量增加 1。
offload(x):从当前位置行驶到位于 $x$ 的矿场,并向该矿场卸载 1 单位爆炸物。仅在满足以下条件时允许执行此操作:- $x = b[j]$(对于某个 $1 \le j \le n$)
你的卡车内至少装有 1 单位爆炸物。
此操作使卡车内的爆炸物数量减少 1。
你需要从每个工厂拾取恰好 1 单位爆炸物,并向每个矿场卸载恰好 1 单位爆炸物。
每当卡车上有爆炸物时,你需要支付费用给安全员以看管这些爆炸物。具体而言,如果你在携带至少 1 单位爆炸物的情况下从 $x$ 行驶到 $y$,则需要支付 $|x - y|$ 的费用,该费用与卡车上的爆炸物数量无关。注意,当卡车上没有爆炸物时,无需支付此费用。
请构造一个操作序列,使得总费用最小。
输入格式
你的程序必须从标准输入读取数据。 第一行包含两个整数 $n$ 和 $c$。 第二行包含 $n$ 个整数 $a[1 \dots n]$。 第三行包含 $n$ 个整数 $b[1 \dots n]$。
输出格式
你的程序必须输出到标准输出。
第一行应包含所需的最小总费用。第二行应包含 $2n$ 个整数,按顺序表示你访问的所有工厂和矿场的位置。
例如,如果你的操作顺序为 pickup(3),offload(5),pickup(6),offload(2),则第二行应包含 3 5 6 2。
数据范围
对于所有测试用例,输入满足以下限制: $1 \le n \le 1000$ $1 \le c \le 1000$ $1 \le a[i], b[i] \le 10000$(对于所有 $1 \le i \le n$) $a[1 \dots n], b[1 \dots n]$ 互不相同(即所有工厂和矿场的位置各不相同)。
你的程序将在满足以下限制的输入实例上进行测试:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 0 | 0 | 样例测试用例 |
| 1 | 16 | $c = 1$ |
| 2 | 22 | $a[i] \le 5000, b[i] > 5000$(对于所有 $1 \le i \le n$) |
| 3 | 62 | 无附加限制 |
对于每个子任务,如果你能为该子任务中的所有测试用例输出正确的最小费用,你将获得 50% 的分数。
样例
样例输入 1
3 2 12 14 4 9 5 8
样例输出 1
7 4 5 14 12 9 8
说明
有 3 个工厂,分别位于位置 12、14 和 4。有 3 个矿场,分别位于位置 9、5 和 8。
一种可能的操作序列是 pickup(4),offload(5),pickup(14),pickup(12),offload(9),offload(8)。这些操作的费用计算如下:
- 初始时,卡车内没有爆炸物。从 0 移动到 4 无需支付费用。
- 在位置 4 拾取后,卡车内有 1 单位爆炸物。操作
offload(5)的费用为 $|5 - 4| = 1$。此时卡车为空(即不含爆炸物)。 pickup(14)不产生费用,因为此时卡车为空。pickup(12)的费用为 $|14 - 12| = 2$,因为此时卡车内有 1 单位爆炸物。offload(9)的费用为 $|12 - 9| = 3$。offload(8)的费用为 $|9 - 8| = 1$。- 因此,支付的总费用为 $1 + 2 + 3 + 1 = 7$。
如果你的输出仅为:
7
那么你将获得 50% 的分数。注意,不允许在费用之后打印任何内容,且该费用必须对子任务中的所有测试用例均正确。