**路口等待时间**

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。

算法步骤

  1. 按示例格式读取 4 行输入:RG、方向数组、到达时间数组。
  2. 周期 C = R + G
  3. last[E/W/S/N] 记录四个方向上一辆车的离开时间,初始为 0。
  4. 对每辆车:
    • 若方向为 E/W,周期内 t % C < R 为红灯,否则为绿灯。
    • 若方向为 S/N,周期内 t % C >= R 为红灯,否则为绿灯。
    • 计算当前车因为红灯限制得到的最早可通行时间 greenTime
    • 实际开始时间 start = max(greenTime, last[direction])
    • 更新 last[direction] = start + 1
  5. 处理完所有车辆后,最后离开时间为四个方向 last 的最大值。
  6. 总耗时为 最后离开时间 - 第一辆车到达时间

复杂度分析

设车辆数量为 n

  • 每辆车只处理一次,时间复杂度为 O(n)
  • 只维护四个方向的最后离开时间,空间复杂度为 `O(
THE END