Official

A - バスの出発時刻 / Bus Departure Time Editorial by admin

GPT 5.2 High

概要

全員がバスに乗り込む最後の時刻(最大の \(T_i\))を求め、その \(K\) 分後の時刻を出力する問題です。

考察

高橋君が出発の合図を出すのは「最後の生徒が乗り込んでからちょうど \(K\) 分後」です。
つまり必要なのは、全員の乗車時刻 \(T_1, T_2, \ldots, T_N\) のうち最も遅い時刻

  • 最後に乗り込む時刻 \(=\max(T_i)\)

を求めることだけです。出発の合図の時刻はそこに \(K\) を足して

  • 答え \(=\max(T_i) + K\)

となります。

例えば \(T=[10, 3, 25]\), \(K=7\) のとき、最後に乗るのは時刻 \(25\) の生徒なので、合図は \(25+7=32\) です。

素朴に「最後の生徒が誰か」を探すために並べ替え(ソート)して最後を見る方法もありますが、ソートは \(O(N\log N)\) かかります。最大値を1回走査で求めれば \(O(N)\) で済み、よりシンプルです。

アルゴリズム

  1. 入力として \(N, K\) と配列 \(T\) を受け取る。
  2. \(T\) の最大値 \(M=\max(T)\) を求める。
  3. \(M+K\) を出力する。

計算量

  • 時間計算量: \(O(N)\)(最大値を1回の走査で求めるため)
  • 空間計算量: \(O(N)\)(入力の配列 \(T\) を保持するため)

実装のポイント

  • \(T_i\) は最大で \(10^9\) なので、言語によっては整数型の範囲に注意します(Pythonは問題なし)。

  • 入力が最大 \(10^5\) 個あるため、Pythonでは sys.stdin.buffer.read() を使うと高速に読み込めます。

  • 必要なのは最大値だけなので、max(T) を使えば簡潔に書けます。

    ソースコード

import sys

def main():
    data = list(map(int, sys.stdin.buffer.read().split()))
    N, K = data[0], data[1]
    T = data[2:2+N]
    print(max(T) + K)

if __name__ == "__main__":
    main()

この解説は gpt-5.2-high によって生成されました。

posted:
last update: