**路口等待时间**
2026 华为OD机试真题 7月29日华为OD上机新系统考试真题 200 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
十字路口的红绿灯分为东西向(E/W)和南北向(S/N)两组,两组状态始终相反。东西向红灯亮 R 秒,然后绿灯亮 G 秒,不断循环;南北向则相反——绿灯亮 R 秒,然后红灯亮 G 秒。刚开始时(秒)东西方向是红灯,南北方向是绿灯。
红绿灯切换无过渡期,红灯结束时绿灯立即开始,无需额外等待。
车辆到达路口时,遇到绿灯直接走,通过路口需要 1 秒,如遇到红灯停下来等。E/W/S/N 四个方向各有一条独立车道,各自排队,互不干扰,而同向后车必须等前车走完才能走。
求从第一辆车到达路口,到最后一辆车完全离开,共同花费多少秒,和最后一辆离开的时间是第几秒。
2026 华为OD机试真题 7月29日华为OD上机新系统考试真题 200 分题型
输入描述
输入共 4 行:
- 第一行输入整数
R,表示东西向红灯持续秒数。 - 第二行输入整数
G,表示东西向绿灯持续秒数。 - 第三行输入车辆方向列表,使用大写字母
E/W/S/N表示,方向之间用英文逗号分隔。 - 第四行输入车辆到达时间列表,整数之间用英文逗号分隔。
输出描述
输出数组 [总耗时, 最后一辆车离开时间]。
补充说明
保证车辆的来向数量和到达时刻数量相等,且到达时刻按非递减顺序排列。
取值范围:
- 1≤R,G≤60
- 到达时刻 ≤100
- 车辆数量 ≤100
示例1
输入
3
5
E,S,W,N
0,1,3,6
输出
[9,9]
说明
周期 C=8 秒。E/W 方向红灯条件:t%8<3,S/N 方向红灯条件:t%8≥3。
E 车
秒到达,等到 t=3 开始通行,t=4 离开;S 车1秒到达,t=2 离开;W 车3秒到达,t=4 离开;N 车6秒到达,等到 t=8 开始通行,t=9 离开。最早到达=
秒,最晚离开=9秒,总时间=9−0=9 秒。
示例2
输入
2
3
E,E,S
1,3,4
输出
[5,6]
说明
周期 C=5 秒。E/W 方向红灯条件:t%5<2,S/N 方向红灯条件:t%5≥2。
E1 车
1秒到达,等到 t=2 开始通行,t=3 离开;E2 车3秒到达,t=4 离开;S 车4秒到达,等到 t=5 开始通行,t=6 离开。最早到达=
1秒,最晚离开=6秒,总时间=5 秒。
解题思路
核心思想
每辆车是否需要等红灯,只和它的到达时间、方向、红绿灯周期有关。除此之外,同一方向还有独立车道队列,后车必须等同方向上一辆车离开后才能开始通过。
因此可以按车辆到达顺序模拟。对每辆车先计算“按红绿灯限制最早可通行时刻”,再与该方向上一辆车的离开时间取最大值,得到实际开始通行时刻。通过路口耗时 1 秒,离开时间就是开始时间加 1。
算法步骤
- 按示例格式读取 4 行输入:
R、G、方向数组、到达时间数组。 - 周期
C = R + G。 - 用
last[E/W/S/N]记录四个方向上一辆车的离开时间,初始为 0。 - 对每辆车:
- 若方向为
E/W,周期内t % C < R为红灯,否则为绿灯。 - 若方向为
S/N,周期内t % C >= R为红灯,否则为绿灯。 - 计算当前车因为红灯限制得到的最早可通行时间
greenTime。 - 实际开始时间
start = max(greenTime, last[direction])。 - 更新
last[direction] = start + 1。
- 若方向为
- 处理完所有车辆后,最后离开时间为四个方向
last的最大值。 - 总耗时为
最后离开时间 - 第一辆车到达时间。
复杂度分析
设车辆数量为 n。
- 每辆车只处理一次,时间复杂度为
O(n)。 - 只维护四个方向的最后离开时间,空间复杂度为 `O(