#P14799. [Bulgarian2018组队赛]rolling ball
[Bulgarian2018组队赛]rolling ball
题目描述
给定一个装置,它由 n 个首尾相接的三角形组成,这些三角形的底边都 леж在同一直线上。三角形彼此不重叠,且每两个相邻三角形恰好有一个公共顶点,这个公共顶点也在那条直线上。
这些三角形的高度依次为 h1, h2, …, hn 米。
从最左边三角形的顶点释放一个小球。小球会沿斜边滚下,再尝试爬上右边相邻三角形的斜边。
- 小球初始能量为
0。 - 每下降
1米垂直高度,小球能量增加ed。 - 每上升
1米垂直高度,小球能量减少eu。 - 坡长本身无关紧要,只看垂直高度变化。
- 如果小球在上升过程中能量变为
0,它就会停下。 - 若它到达某个三角形顶点时能量仍然
≥ 0,则视为成功越过这个顶点,并继续向下滚动。
题目保证总满足以下两种情况之一:
eu ≥ 2ed > 0;1.5ed ≥ eu > ed > 0。
情况 2ed > eu > 1.5ed 在本题中不会出现。
各三角形的高度 hi 是非负整数(允许为 0)。你可以把任意三角形的高度增加或减少若干整数,但修改后仍必须保持非负。
请编写程序 rolling_ball,求出最小的总修改量(即所有三角形高度改变量绝对值之和),使得从最左边三角形顶点释放的小球能够“越过”所有三角形。

输入格式
第一行输入正整数 T,表示测试中的构造数量。
接下来有 T 组数据,每组包含三行:
- 第一行:一个正整数
n,表示该构造中的三角形个数; - 第二行:
n个非负整数,表示各三角形初始高度; - 第三行:两个正整数
ed和eu。
输出格式
对每组数据输出一行一个非负整数,表示使小球能够越过全部三角形所需的最小总修改量。
限制
1 ≤ T ≤ 100001 ≤ n ≤ 100000- 单个测试中所有构造的
n之和满足≤ 300000 0 ≤ hi ≤ 100000001 ≤ ed < eu ≤ 150000
子任务
| 子任务 | 分值 | T |
n |
hi |
ed, eu |
|---|---|---|---|---|---|
| 1 | 10 | 1 ≤ T ≤ 10 |
1 ≤ n ≤ 5 |
1 ≤ hi ≤ 5 |
1 ≤ ed < eu ≤ 1.5ed ≤ 150 |
| 2 | 20 | eu ≥ 2ed |
|||
| 3 | 1 ≤ T ≤ 10 |
1 ≤ n ≤ 50 |
1 ≤ hi ≤ 50 |
1 ≤ ed < eu ≤ 1.5ed |
|
| 4 | 1 ≤ T ≤ 100 |
1 ≤ n ≤ 1000 |
|||
| 5 | 30 | ||||
只有通过某个子任务中的全部测试,才能得到该子任务的分数。
样例输入
2
4
3 2 1 5
35 38
5
4 1 3 1 1
85 102
样例输出
3
0