#P14535. [OII 2025] 木材运输 / Trasporto tronchi

[OII 2025] 木材运输 / Trasporto tronchi

题目背景

译自 Italian Olympiad in Informatics (OII) 2025 - Trasporto tronchi

OII 2025 纪念碑的建造准备工作已经开始。为了清理场地,一些树木被砍伐,现在需要将它们装上卡车运往木工车间。

题目描述

初始时,第 ii 棵树位于位置 AiA_i,卡车位于位置 00

在开始装载之前,可以对一些树木进行修剪:修剪一棵树的成本为 KK,可以使树干变得光滑,从而可以在其他光滑的树干上滚动。

树木可以通过两种方式移动:

  • 任何树都可以向卡车方向移动一个位置(该位置必须是空的),代价为 11
  • 如果一棵被修剪的树的紧左侧有一个或多个连续的被修剪的树,并且这些树左侧紧接着一个空位,那么这棵树可以在这些树上滚动(但不能在未修剪的树或地面上滚动)直到到达空位,代价为 11

卡车所在的位置被视为一个空位置。

请帮助组织者确定将所有树木装上卡车的最小代价。

实现细节

附件中包含一个实现示例 alberi.cpp

你需要实现如下函数:

long long carica(int N, int K, vector<int> A);
  • NN:树木的数量。
  • KK:修剪一棵树的成本。
  • AA:下标从 00N1N-1,包含树木的初始位置。
  • 该函数需要返回将所有树木带到位置 00 的最小代价。
  • 对于每个测试点,该函数都只会被调用一次。

输入格式

评测程序的输入格式如下:

  • 11 行:N KN\ K
  • 22 行:A0 A1  AN1A_0\ A_1\ \ldots\ A_{N-1}

输出格式

评测程序的输出格式如下:

输出一行一个整数,表示函数 carica 的返回值。

3 2
1 5 6
11
6 3
1 4 5 10 12 14
30

提示

【样例解释】

在样例 1 中,一种使代价最小的方案为:

  • 对位置在 5,65,6 的树进行修剪;
  • 在修剪之后只需要 77 次移动,总代价为 7+22=117+2\cdot 2=11

在样例 2 中,一种使代价最小的方案是修剪除了第一棵树之外的所有树。

【数据范围】

  • 1N5×1051 \leq N \leq 5\times 10^5
  • 0K1090 \leq K \leq 10^9
  • 1Ai1091 \leq A_i \leq 10^9
  • Ai<Ai+1A_i < A_{i+1}

【子任务】

子任务编号 分值 约束条件
00 样例
11 1111 K=109K = 10^9
22 1717 K=0K = 0N500N \leq 5001Ai20001 \leq A_i \leq 2000
33 2222 K=0K = 0
44 2323 K2000K \leq 2000N500N \leq 5001Ai20001 \leq A_i \leq 2000
55 2727 无额外限制