CF187D BRT Contract
题目描述
在 PMP 的最后一场战争中,他击败了所有对手,进入了决赛。但在半决赛结束后,一股邪恶的力量从背后袭击了他并将其杀害!愿上帝保佑他。
死前,PMP 与公交快速交通(BRT)签订了一份合同,要求通过优化行驶时间的估算来改善公共交通。你需要帮助 PMP 完成他最后的合同。
每条 BRT 线路是一条直线,沿途经过 $n$ 个交叉路口。在每个交叉路口都有一个信号灯,该信号灯周期性地在绿灯和红灯之间切换。从时刻零开始亮起绿灯。在绿灯阶段,持续 $g$ 秒,车辆可以通过。绿灯时间结束后,信号灯变成红灯,并保持红灯 $r$ 秒。在红灯阶段,车辆禁止通行。如果一辆车正好在灯从绿变红的那一瞬间到达路口,则必须停车;但如果车刚好在灯从红变绿的那一瞬间到达,则可以直接通过。
所有信号灯的周期和相位完全同步,也就是说红灯和绿灯的周期对所有信号灯都相同,且均从时刻零开始亮绿灯。
BRT 公司已经统计了公交车通过每段道路所需的时间。一段道路是指两个连续的信号灯之间,或信号灯和起点(或终点)站点之间的距离。BRT 专家为你提供了 $n+1$ 个正整数 $l_i$,表示公交车从起点到终点,每一段路段需要的时间(单位为秒)。其中 $l_1$ 表示从起点到第一个路口所需时间,$l_{n+1}$ 表示最后一个路口到终点所需时间。
一天中有 $q$ 辆公交车从起点发车,第 $i$ 辆公交车在时刻 $t_i$(单位为秒)出发。BRT 公司决策者想知道每辆公交车何时能够到达终点。
我们把公交车视作一个点。如果可以前进,公交车总是会继续前进。公交车之间互不影响。
输入格式
输入的第一行包含三个用空格分隔的正整数 $n, g, r$($1 \leq n \leq 10^5, 2 \leq g + r \leq 10^9$),分别表示交叉路口的数量、绿灯持续时间和红灯持续时间。下一行包含 $n+1$ 个整数 $l_i$($1 \leq l_i \leq 10^9$),即每段路程所需的时间。
接下来一行包含单个整数 $q$($1 \leq q \leq 10^5$),表示一天中公交车的数量。接下来的 $q$ 行,每行一个整数 $t_i$($1 \leq t_i \leq 10^9$),表示第 $i$ 辆公交车离开起点的时间。
输出格式
对于每一辆公交车,在第 $i$ 行输出一个整数,表示第 $i$ 辆公交车到达终点的时间。
请不要在 C++ 中使用 %lld 来读写 64 位整数。推荐使用 cin、cout 流或 %I64d 格式。
说明/提示
在第一个样例中,第 1、2 和 5 号公交车能够顺利通过所有红绿灯而无需等待。但第 3 和 4 号在路口需等待。
在第二个样例中,第 1 辆车需在第 3、4、5 个路口等待;第 2、3 辆车仅需在第 5 个路口等待。
由 ChatGPT 5 翻译