B4179 [厦门小学生 C++ 2024] 战线巡逻
题目背景
本试题为 2024 年厦门市小学生 C++ 语言**复赛**试题,数据为洛谷自造。
**初赛**为笔试。
题目描述
在一条战线中,有 $n$ 个需要巡逻的点,为了完成巡逻任务,指挥部计划指派 $k$ 个哨兵,每个哨兵可以自由选择起始位置 $i$,不消耗体力。但哨兵每移动一个单位距离(从 $i$ 到 $i+1$ 或 $i-1$),则消耗 $1$ 点体力。
指挥部的目标是将 $k$ 个哨兵合理部署到战线上,使得:
- 所有需要巡逻的点都由至少一名哨兵巡逻过。
- 哨兵总体力消耗的最小。
请你设计一个合理的方案,计算最小的体力消耗,并输出结果。
输入格式
- 第一行,两个整数,分别是 $k$ 和 $n$;
- 第二行,$n$ 个整数,战线中必须巡逻的坐标 $a_i$。
输出格式
输出消耗的最少体力。
说明/提示
### 样例解释 1
- 哨兵 1 初始点位即为 $-10$,接下来无需移动,消耗为 $0$。
- 哨兵 2 初始点位为 $-1$,接下来需向右移动 $2$ 个位置到点位 $1$,消耗为 $2$。
- 哨兵 3 初始点位即为 $14$,接下来无需移动,消耗为 $0$。
综上,总消耗为 $0+2+0 = 2$。
### 样例解释 2
- 哨兵 1 初始点位即为 $-100$,接下来无需移动,消耗为 0。
- 哨兵 2 初始点位为 $-11$,接下来无需移动,消耗为 0。
- 哨兵 3 初始点位即为 $-3$,接下来需向右移动 $3$ 个位置至点位 $0$,消耗为 $3$;接下来需向右移动 $1$ 个位置至点位 $2$,消耗为 $1$;接下来需向右移动 $1$ 个位置至点位 $2$,消耗为 $1$;接下来需向右移动 $7$ 个位置至点位 $9$,消耗为 $7$;共计消耗 $3+1+1+7 = 12$。
- 哨兵 4 初始点位即为 $17$,接下来需向右移动 $3$ 个位置,消耗为 $3$。
综上,总消耗为 $0+0+12+3 = 15$。
### 样例解释 3
根据题意,哨兵巡逻可以做到不消耗体力。
### 数据范围
对于所有测试数据有:$-10^5 \leq a_i \leq 10^5$,$1 \leq k \leq 10^5$,$1 \leq n \leq 10^5$。
| 测试点 | 特殊性质 A | $k$ | $n$ |
|:--------:|:------------:|:---:|:---:|
| $1, 2$ | 否 | $k=1$ | $\leq 10^5$ |
| $3, 4$ | 是 | $\leq 10^5$ | $\leq 10^5$ |
| $5, 6, 7$| 否 | $\leq 10^3$ | $\leq 10^2$ |
| $8, 9, 10$ | 否 | $\leq 10^5$ | $\leq 10^5$ |
特殊性质 A:保证 $k \geq n$ 恒成立。