#B4179. [厦门小学生 C++ 2024] 战线巡逻

[厦门小学生 C++ 2024] 战线巡逻

题目背景

本试题为 2024 年厦门市小学生 C++ 语言复赛试题,数据为洛谷自造。

初赛为笔试。

题目描述

在一条战线中,有 nn 个需要巡逻的点,为了完成巡逻任务,指挥部计划指派 kk 个哨兵,每个哨兵可以自由选择起始位置 ii,不消耗体力。但哨兵每移动一个单位距离(从 iii+1i+1i1i-1),则消耗 11 点体力。

指挥部的目标是将 kk 个哨兵合理部署到战线上,使得:

  • 所有需要巡逻的点都由至少一名哨兵巡逻过。
  • 哨兵总体力消耗的最小。

请你设计一个合理的方案,计算最小的体力消耗,并输出结果。

输入格式

  • 第一行,两个整数,分别是 kknn
  • 第二行,nn 个整数,战线中必须巡逻的坐标 aia_i

输出格式

输出消耗的最少体力。

3 4
-10 -1 1 14
2
4 9
-11 -3 0 9 -100 2 17 20 1
15
5 3
-1000 100 200
0

提示

样例解释 1

  • 哨兵 1 初始点位即为 10-10,接下来无需移动,消耗为 00
  • 哨兵 2 初始点位为 1-1,接下来需向右移动 22 个位置到点位 11,消耗为 22
  • 哨兵 3 初始点位即为 1414,接下来无需移动,消耗为 00

综上,总消耗为 0+2+0=20+2+0 = 2

样例解释 2

  • 哨兵 1 初始点位即为 100-100,接下来无需移动,消耗为 0。
  • 哨兵 2 初始点位为 11-11,接下来无需移动,消耗为 0。
  • 哨兵 3 初始点位即为 3-3,接下来需向右移动 33 个位置至点位 00,消耗为 33;接下来需向右移动 11 个位置至点位 22,消耗为 11;接下来需向右移动 11 个位置至点位 22,消耗为 11;接下来需向右移动 77 个位置至点位 99,消耗为 77;共计消耗 3+1+1+7=123+1+1+7 = 12
  • 哨兵 4 初始点位即为 1717,接下来需向右移动 33 个位置,消耗为 33

综上,总消耗为 0+0+12+3=150+0+12+3 = 15

样例解释 3

根据题意,哨兵巡逻可以做到不消耗体力。

数据范围

对于所有测试数据有:105ai105-10^5 \leq a_i \leq 10^51k1051 \leq k \leq 10^51n1051 \leq n \leq 10^5

测试点 特殊性质 A kk nn
1,21, 2 k=1k=1 105\leq 10^5
3,43, 4 105\leq 10^5
5,6,75, 6, 7 103\leq 10^3 102\leq 10^2
8,9,108, 9, 10 105\leq 10^5

特殊性质 A:保证 knk \geq n 恒成立。