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)\) で済み、よりシンプルです。
アルゴリズム
- 入力として \(N, K\) と配列 \(T\) を受け取る。
- \(T\) の最大値 \(M=\max(T)\) を求める。
- \(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: