这是一道交互题,你只需要实现代码中要求的函数。
本题仅支持 C++ 语言提交。
题目描述
从布达佩斯机场到 Forrás 酒店有一条单向单车道的公路,公路的长度为
IOI 2023 活动期间,有
巴士在这条公路上行驶时一般不允许超车,但允许在一些被称为调度站的地方进行超车。公路上一共有
每辆巴士都以指定的最快速度行驶,除非它遇到前面有比它慢的巴士。在这种情况下,后面的快车会被前面的慢车压着,被迫以慢车的速度行驶。这种情况会持续到两车到达下一个调度站。在那里,快车会完成对慢车的超越。
形式化地说,对于满足
- 定义巴士
到达调度站 的期望到达时间 (以秒为单位)为巴士 到达调度站 之后以全速行驶到达调度站 的时间。也就是说,- 对于每个
,有 ; - 另有
。
- 对于每个
- 巴士
到达调度站 的时间,是巴士 到达调度站 的期望到达时间,以及其他比巴士 早到调度站 的巴士到达调度站 的期望到达时间中的最大值。形式化地说, 是 和所有满足 且 的 中的最大值。
IOI 组委会想要调度备用巴士(巴士
实现细节
你的任务是实现以下函数:
void init(int L, int N, int64[] T, int[] W, int X, int M, int[] S)
:公路的长度 :常规(非备用)巴士的数量 :长度为 的数组,描述常规巴士计划从机场出发的时间。 :长度为 的数组,描述常规巴士的最大速度。 :备用巴士行驶一公里所需的时间 :调度站的数量 :长度为 的数组,描述从机场到调度站的距离。- 对于每个测试用例,这个函数都恰好调用一次,发生在对任何
arrival_time
的调用之前。
int64 arrival_time(int64 Y)
:备用巴士(巴士 )计划从机场出发的时间- 这个函数应该返回备用巴士到达酒店的时间。
- 这个函数恰好调用
次。
例子
考虑以下调用序列:
init(6, 4, [20, 10, 40, 0], [5, 20, 20, 30], 10, 4, [0, 1, 3, 6])
忽略巴士
巴士到达调度站
到达调度站
- 调度站
的期望到达时间:- 巴士
: 。 - 巴士
: 。 - 巴士
: 。 - 巴士
: 。
- 巴士
- 调度站
的到达时间:- 巴士
和 早于巴士 到达调度站 ,所以 。 - 巴士
早于巴士 到达调度站 ,所以 。 - 巴士
、巴士 和巴士 早于巴士 到达调度站 ,所以 。 - 没有比巴士
更早到达调度站 的巴士,所以 。
- 巴士
arrival_time(0)
巴士
由此可知巴士
arrival_time(50)
巴士
巴士
将每辆巴士从机场出发到不同距离的时间画成折线图。 图中 x 轴表示从机场出发的距离(以公里为单位),y 轴表示时间(以秒为单位)。 竖的虚线标注了调度站的位置。 不同颜色的实线(标注了巴士的编号)表示四辆常规巴士。 黑色的点线表示备用巴士。
arrival_time(0) |
arrival_time(50) |
---|---|
![]() |
![]() |
评测程序示例
评测程序示例按以下格式读取输入:
- 第
行: - 第
行: - 第
行: - 第
行: - 第
行( ):问题 的
评测程序示例按以下格式打印你的答案:
- 第
行( ):问题 中arrival_time
的返回值
样例 #1
样例输入 #1
6 4 10 4 2 20 10 40 0 5 20 20 30 0 1 3 6 0 50
样例输出 #1
60 130
约束条件
(对于满足 的每个 ) (对于满足 的每个 )
子任务
- (9 分)
- (10 分)
- (20 分)
- (26 分)
- (35 分)没有额外的约束条件。
时间限制:2.5s
空间限制: