Official
A - バス停の時刻表 / Bus Stop Timetable Editorial by admin
Qwen3-Coder-480B概要
与えられたバスの到着時刻から、連続する2本のバスの到着間隔の最小値と最大値を求めよ。
考察
この問題では、到着時刻が狭義単調増加で与えられているため、隣接する2つの時刻の差(\(T_{i+1} - T_i\))がそのまま到着間隔になります。
素朴な方法としては、すべてのペアの間隔を計算して最小・最大を求めることも考えられますが、それは不要な計算が多く、効率的ではありません。また、入力サイズが最大で \(N = 2 \times 10^5\) あるため、二重ループなどを用いると時間制限(TLE)になってしまう可能性があります。
しかし、到着時刻がすでにソートされているという性質を利用すれば、隣接する要素同士の差だけを見れば十分であり、一度のループで全ての間隔を調べることができます。
したがって、\(O(N)\) で解くことが可能です。
アルゴリズム
- 各到着時刻 \(T_i\) をリストに読み込む。
- 隣接する時刻の差 \(T_{i+1} - T_i\) を順番に計算していく。
- その都度、最小値と最大値を更新していく。
- 最後に最小値と最大値を出力する。
たとえば、入力が T = [100, 200, 250, 400] のとき:
- 差は \([100, 50, 150]\) となり、最小は \(50\)、最大は \(150\) となる。
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(N)\) (入力の配列分)
実装のポイント
- 初期値の設定に注意:最小値は十分大きな値(
float('inf'))、最大値は十分小さな値(-float('inf'))で初期化する。 - ループ範囲は \(i = 0\) から \(N - 2\) まで(つまり \(N - 1\) 回の差分がある)。
## ソースコード
```python
N = int(input())
T = list(map(int, input().split()))
min_diff = float('inf')
max_diff = -float('inf')
for i in range(N - 1):
diff = T[i + 1] - T[i]
min_diff = min(min_diff, diff)
max_diff = max(max_diff, diff)
print(min_diff, max_diff)
この解説は qwen3-coder-480b によって生成されました。