luogu#P11586. [KTSC 2022 R1] 松鼠

[KTSC 2022 R1] 松鼠

题目背景

请使用 C++17 或 C++20 提交本题

你需要在程序开头加入如下代码:

#include <vector>

long long fly(std::vector<int> D, std::vector<int> H, std::vector<int> W, int L, int R);

题目译自 2022년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사 T4「 날다람쥐

题目描述

在二维平面上,有 NN 根柱子按顺序排列。柱子从左到右编号为 11NN。第 i(1iN)i (1 \leq i \leq N) 根柱子的底部位于点 (Di,0)(D_{i}, 0),高度为 HiH_{i}。因此,这根柱子是连接点 (Di,0)(D_{i}, 0)(Di,Hi)(D_{i}, H_{i}) 的线段。此外,D1=0D_{1}=0

一开始,松鼠位于最左边柱子的高度为 LL 的位置,即点 (0,L)(0, L)。松鼠需要依次经过所有柱子,最终到达最右边柱子的高度为 RR 的位置,即点 (DN,R)(D_{N}, R)

当松鼠从一根柱子飞到下一根柱子时,如果向右移动 d(d0)d (d \geq 0),高度会下降 dd。在到达下一根柱子之前,松鼠不能碰到地面。到达下一根柱子的高度为 00 的位置是允许的。

松鼠可以在一根柱子上向上爬或向下滑,但不能爬到超过柱子高度的位置。在第 ii 根柱子上向上爬 h(h0)h (h \geq 0) 需要花费 Wi×hW_{i} \times h 的费用。向下滑动不需要费用。

下图是飞天松鼠移动的一个例子。

下图左侧的移动方式由于中途碰到地面,因此不允许。下图右侧的移动方式由于没有经过所有柱子,也不允许。

请计算松鼠以最小总费用到达目标位置的方法。

你需要实现以下函数:

long long fly(vector<int> D, vector<int> H, vector<int> W, int L, int R);

  • 该函数只会被调用一次。
  • 给定的三个数组的大小为柱子的数量 NN
  • 给定的整数数组 DD 中,D[i]D[i] 表示第 11 根柱子到第 i+1i+1 根柱子的距离 Di+1D_{i+1}
  • 给定的整数数组 HH 中,H[i]H[i] 表示第 i+1i+1 根柱子的高度 Hi+1H_{i+1}
  • 给定的整数数组 WW 中,W[i]W[i] 表示第 i+1i+1 根柱子上每上升 11 单位距离的费用 Wi+1W_{i+1}
  • 给定的整数 LL 表示飞天松鼠在第 11 根柱子上的初始高度。
  • 给定的整数 RR 表示飞天松鼠在第 NN 根柱子上需要到达的高度。

该函数的返回值应为:

  • 如果有方法遵守规则到达最终位置,返回飞天松鼠到达最终位置的最小费用。可以证明,满足约束条件的输入数据的最小费用总是整数。
  • 如果没有方法遵守规则到达最终位置,返回 -1

注意,提交的代码中不应包含任何输入输出操作。

输入格式

示例评测程序按以下格式读取输入:

  • 11 行:NN
  • 1+i(1iN)1+i (1 \leq i \leq N) 行:DiHiWiD_{i}\,H_{i}\,W_{i}
  • 2+N2+N 行:LRL\,R

输出格式

示例评测程序按以下格式输出:

11 行:函数 fly 返回的值。

3
0 8 3
2 5 4
5 5 6
5 4

18

3
0 4 6
3 2 5
5 6 3
1 5

37

提示

样例解释 #1

考虑 N=3N=3,第 11 根柱子到第 22 根柱子的距离为 22,第 11 根柱子到第 33 根柱子的距离为 55,柱子的高度从左到右分别为 8,5,58,5,5,柱子的权重从左到右分别为 3,4,63,4,6L=5,R=4L=5, R=4 的情况。

评测程序将调用如下函数:

fly([0,2,5],[8,5,5],[3,4,6], 5,4)=18

在这种情况下,从第 11 根柱子上升 22 个单位距离,然后在第 33 根柱子上升 22 个单位距离是最优的,因此函数应返回 1818

这个例子满足子任务 3,4,5,63,4,5,6 的条件。

数据范围

对于所有输入数据,满足:

  • 2N51052 \leq N \leq 5\cdot 10^5
  • 0=D1<D2<<DN1090=D_{1}<D_{2}<\cdots<D_{N} \leq 10^{9}
  • 1Hi109(1iN)1 \leq H_{i} \leq 10^{9}(1 \leq i \leq N)
  • 0Wi109(1iN)0 \leq W_{i} \leq 10^{9}(1 \leq i \leq N)
  • 0LH10 \leq L \leq H_{1}
  • 0RHN0 \leq R \leq H_{N}

详细子任务附加限制及分值如下表所示。

子任务 分值 约束
11 44 Wi=0(1iN)W_{i}=0 (1 \leq i \leq N)
22 1313 Wi=1(1iN)W_{i}=1 (1 \leq i \leq N)
33 1818 WiWi+1(1iN1)W_{i} \leq W_{i+1} (1 \leq i \leq N-1)
44 1515 N500,Hi500(1iN)N \leq 500,H_{i} \leq 500 (1 \leq i \leq N)
55 1818 N5000N \leq 5000
66 3232 无附加限制