#P15588. [KTSC 2026] 飞扬的松鼠 2 / Flying Squirrel 2
[KTSC 2026] 飞扬的松鼠 2 / Flying Squirrel 2
题目描述
在二维平面上有一只飞扬的松鼠和 根柱子。
我们将二维平面上的点表示为 ,其中横坐标 代表向右的偏移,纵坐标 代表向上的偏移。
柱子依次编号 。柱子 的底部位于 ,高度为无穷高。换言之,柱子 是一条从 出发,方向向上的射线。每根柱子要么是红色,要么是蓝色。若 ,柱子 是红色的;否则 ,柱子 是蓝色的。
在柱子以外的区域,松鼠向右水平飞行,维持现有高度不变。由于松鼠十分敏捷,向右飞行的时间视为 。
当松鼠在柱子上时,松鼠可以将自己的高度改变 ,或者什么都不做。准确地说,在柱子 的位置时,松鼠必须执行下列恰好一个操作:
- 穿过柱子。松鼠的高度不变,继续向右飞行。消耗时间为 。
- 爬上柱子。当且仅当柱子是红色的()时可以执行该操作。松鼠的高度增加 ,然后继续向右飞行。消耗时间为 。
- 跳下柱子。当且仅当柱子是蓝色的()时可以执行该操作。松鼠的高度减少 ,然后继续向右飞行。消耗时间为 。
此外,当松鼠横坐标为 ()时,松鼠的高度必须在 间。当松鼠横坐标为 时,松鼠的高度必须为 。
令 为满足上述条件的情况下,松鼠用恰好 次「跳下」操作到达 所花费的时间最小值。若不存在这样的方案,令 。
求出 。
实现细节
这是一道函数式交互题。你不必,也不应实现 main 函数。
你应当实现以下的函数:
vector<long long> fly(int H, vector<int> A, vector<int> B, vector<int> L, vector<int> R)
- :松鼠的最终高度。
- :大小为 的整数数组。
- :描述柱子颜色的数组。若 ,柱子 是红色的;否则 ,柱子 是蓝色的。
- 该函数必须返回一个大小为 的数组 。
- 该函数被调用恰好一次。
你的源代码中不应调用任何输入/输出函数。
输入格式
样例评分程序的输入格式如下:
- 第 行:
- 第 行:
- 第 行:
- 第 行:
- 第 行:
输出格式
样例评分程序按以下格式打印答案:
- 第 行:
4 3
8 8 2 4
1 0 1 0
1 0 2 3
1 2 2 4
-1 20 14 -1
1 1
1000000000
0
1
1
1000000000 -1
7 3
4 7 0 3 8 4 5
0 0 0 0 0 0 0
0 0 0 1 0 1 2
5 1 2 5 5 6 3
7 -1 -1 -1
20 7
3 3 4 1 3 2 0 1 4 3 4 0 0 1 0 4 4 5 5 0
1 1 0 0 1 1 0 1 0 0 0 0 0 0 1 1 1 0 0 1
0 0 1 1 2 1 2 2 1 1 0 1 1 3 2 2 1 6 4 4
3 2 3 3 6 2 2 4 3 4 4 5 3 6 6 5 7 8 8 9
-1 16 11 10 9 10 12 15
提示
数据范围
- ;
- ;
- ;
- ;
- 。
子任务
| 编号 | 得分 | 限制 |
|---|---|---|
| 无额外限制 |
样例
样例
考虑以下调用。
fly(3, [8, 8, 2, 4],
[1, 0, 1, 0],
[1, 0, 2, 3],
[1, 2, 2, 4])
::::align{center}
::::
如果松鼠从柱子 跳下并爬上柱子 和 ,则满足条件。在这种情况下,跳跃次数为 ,耗时为 秒。
::::align{center}
::::
如果松鼠从柱子 和 跳下并爬上柱子 ,则满足条件。在这种情况下,跳跃次数为 ,耗时为 秒。
没有其他可能的方法。因此,函数应返回 [, , , ]。
样例
考虑以下调用。
fly(1, [1000000000],
[0],
[1],
[1])
函数应返回 。
样例
考虑以下调用。
fly(3, [4, 7, 0, 3, 8, 4, 5],
[0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 1, 2],
[5, 1, 2, 5, 5, 6, 3])
函数应返回 。
样例
考虑以下调用。
fly(7, [3, 3, 4, 1, 3, 2, 0, 1, 4, 3, 4, 0, 0, 1, 0, 4, 4, 5, 5, 0],
[1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1],
[0, 0, 1, 1, 2, 1, 2, 2, 1, 1, 0, 1, 1, 3, 2, 2, 1, 6, 4, 4],
[3, 2, 3, 3, 6, 2, 2, 4, 3, 4, 4, 5, 3, 6, 6, 5, 7, 8, 8, 9])
函数应返回 。