Official

A - 出発までの準備 / Preparations Before Departure Editorial by admin

Claude 4.5 Opus

概要

準備作業にかかる合計時間が、出発までに使える時間内に収まるかを判定する問題です。

考察

この問題で重要な気づきは以下の点です:

  1. 作業の順番は結果に影響しない: 問題文に「順番によって完了時刻が変わることはありません」と明記されています。つまり、どの順番で作業を行っても、すべての作業を終えるのにかかる時間は「各作業時間の合計」になります。

  2. 時間の単位を揃える: 出発期限 \(T\) と開始時刻 \(S\) は「時」単位で与えられますが、各作業時間 \(A_i\) は「分」単位で与えられます。比較するためには単位を揃える必要があります。

  3. シンプルな比較問題に帰着: 結局のところ、この問題は以下の比較に帰着されます:

    • 準備にかかる合計時間 ≤ 使える時間 なら Yes
    • そうでなければ No

具体例

例えば、\(S = 9\)(9時開始)、\(T = 12\)(12時までに出発)、作業時間が \([30, 60, 45]\) 分の場合: - 使える時間: \((12 - 9) \times 60 = 180\) 分 - 必要な時間: \(30 + 60 + 45 = 135\) 分 - \(135 \leq 180\) なので、間に合います → Yes

アルゴリズム

  1. 全作業にかかる合計時間を計算する:\(\text{total\_time} = \sum_{i=1}^{N} A_i\)
  2. 出発までに使える時間を分単位で計算する:\(\text{available\_time} = (T - S) \times 60\)
  3. \(\text{total\_time} \leq \text{available\_time}\) なら Yes、そうでなければ No を出力
total_time = A[1] + A[2] + ... + A[N]
available_time = (T - S) × 60

if total_time ≤ available_time:
    出力 "Yes"
else:
    出力 "No"

計算量

  • 時間計算量: \(O(N)\)
    • 配列 \(A\) の全要素の合計を計算するのに \(O(N)\)
  • 空間計算量: \(O(N)\)
    • 入力を格納する配列のサイズ

実装のポイント

  • 単位変換を忘れない: 時間を分に変換するため、\((T - S)\)\(60\) を掛けることを忘れないようにしましょう。

  • Pythonのsum()関数: リストの全要素の合計は sum(A) で簡潔に計算できます。

  • 境界条件: 問題文に「\(T\)\(0\) 分ちょうど」でも間に合うと書かれているため、不等号は <=(等号を含む)を使います。

    ソースコード

N, S, T = map(int, input().split())
A = list(map(int, input().split()))

total_time = sum(A)
available_time = (T - S) * 60

if total_time <= available_time:
    print("Yes")
else:
    print("No")

この解説は claude4.5opus によって生成されました。

posted:
last update: