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)\) で解くことが可能です。

アルゴリズム

  1. 各到着時刻 \(T_i\) をリストに読み込む。
  2. 隣接する時刻の差 \(T_{i+1} - T_i\) を順番に計算していく。
  3. その都度、最小値と最大値を更新していく。
  4. 最後に最小値と最大値を出力する。

たとえば、入力が 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 によって生成されました。