[NOISG 2024 Prelim] Explosives

Luogu
IDLGP10712
Time1000ms
Memory1024MB
DifficultyP5
动态规划 DP贪心2024Special JudgeNOISG(新加坡)
你是一名运送炸弹的卡车司机。 有 $n$ 座工厂(生产炸弹)和 $n$ 座矿井(需要炸弹)排列在一条直线上。第 $i$ 座工厂的坐标为 $a_i$,第 $j$ 座矿井的坐标为 $b_j$。并且,所有 $a_i$ 和 $b_j$ 都均不相等。 你今天需要在每一座工厂各领取一个炸弹,并将每一个炸弹送到某一个矿井中。初始时,你的坐标为 $0$。为了完成此任务,你可以进行以下两种操作: - `pickup(x)`:从你当前的位置驾驶卡车到坐落在 $x$ 的工厂。执行这次操作需要同时满足以下两个条件: - 有一个 $i$,满足 $x=a_i$。 - 你的卡车最多装了 $c-1$ 个炸弹。 - `offload(x)`:从你当前的位置驾驶卡车到坐落在 $x$ 的矿井。执行这次操作需要同时满足以下两个条件: - 有一个 $j$,满足 $x=b_j$。 - 你的卡车最少装了 $1$ 个炸弹。 由于炸弹十分危险,所以在你的卡车上需要一名安全员。如果你从点 $x$ 到点 $y$,且车上装有炸弹,那么你需要付给安全员 $|x-y|$ 元。如果车上没有炸药,则你不需要支付任何费用。 请求出在花费最小的情况下的操作序列。 ## Input 第一行,两个整数 $n,c$; 第二行,一行 $n$ 个整数,表示 $a$。 第三行,一行 $n$ 个整数,表示 $b$。 ## Output 第一行,一个整数表示最小花费。 第二行,输出 $2n$ 个整数,表示你访问的工厂和矿井坐标,按照访问顺序输出。 例如你执行了四次操作:`pickup(3)`,`offload(5)`,`pickup(6)`,`offload(2)`,则你应该输出 `3 5 6 2`。 [samples] ## Background 翻译自 [NOI SG 2024 Prelim E.Explosives](https://github.com/noisg/noi-2024-prelim)。 ## Note ### 【样例 #1 解释】 按照顺序访问工厂 $3$,矿井 $2$,工厂 $2$,工厂 $1$,矿井 $1$,矿井 $3$,即可得到最小值 $7$。 以此样例为例,如果你只输出正确的最小代价 $7$,你将可以得到该测试点 $50\%$ 的分数。 ### 【数据范围】 |$\text{Subtask}$|分值|特殊性质| |:-:|:-:|:-:| |$0$|$0$|样例| |$1$|$16$|$c=1$| |$2$|$22$|$a_i\le 5000,b_i>5000$| |$3$|$62$|无| 对于 $100\%$ 的数据,$1 \le n,c \le 1000,1 \le a_i,b_i \le 10000$。
Samples
Input #1
3 2
12 14 4
9 5 8
Output #1
7
4 5 14 12 9 8
API Response (JSON)
{
  "problem": {
    "name": "[NOISG 2024 Prelim] Explosives",
    "description": {
      "content": "你是一名运送炸弹的卡车司机。 有 $n$ 座工厂(生产炸弹)和 $n$ 座矿井(需要炸弹)排列在一条直线上。第 $i$ 座工厂的坐标为 $a_i$,第 $j$ 座矿井的坐标为 $b_j$。并且,所有 $a_i$ 和 $b_j$ 都均不相等。 你今天需要在每一座工厂各领取一个炸弹,并将每一个炸弹送到某一个矿井中。初始时,你的坐标为 $0$。为了完成此任务,你可以进行以下两种操作: - `pic",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 1000,
      "memory_limit": 1048576
    },
    "difficulty": {
      "LuoguStyle": "P5"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP10712"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "你是一名运送炸弹的卡车司机。\n\n有 $n$ 座工厂(生产炸弹)和 $n$ 座矿井(需要炸弹)排列在一条直线上。第 $i$ 座工厂的坐标为 $a_i$,第 $j$ 座矿井的坐标为 $b_j$。并且,所有 $a_i$ 和 $b_j$ 都均不相等。\n\n你今天需要在每一座工厂各领取一个炸弹,并将每一个炸弹送到某一个矿井中。初始时,你的坐标为 $0$。为了完成此任务,你可以进行以下两种操作:\n\n- `pic...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments