QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 1024 MB مجموع النقاط: 100

#8589. 炸药

الإحصائيات

你是一名负责运输爆炸物的爆炸物处理员。在一条直线上有 $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 出发,初始时卡车内没有爆炸物。你的目标是将所有爆炸物从工厂运送到矿场。

具体来说,你可以执行以下操作:

  1. pickup(x):从当前位置行驶到位于 $x$ 的工厂,并从该工厂拾取 1 单位爆炸物。仅在满足以下条件时允许执行此操作:

    • $x = a[i]$(对于某个 $1 \le i \le n$)
    • 你的卡车内最多装有 $c - 1$ 单位爆炸物。

      此操作使卡车内的爆炸物数量增加 1。

  2. 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% 的分数。注意,不允许在费用之后打印任何内容,且该费用必须对子任务中的所有测试用例均正确。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.