A - 出発までの準備 / Preparations Before Departure Editorial by admin
Claude 4.5 Opus概要
準備作業にかかる合計時間が、出発までに使える時間内に収まるかを判定する問題です。
考察
この問題で重要な気づきは以下の点です:
作業の順番は結果に影響しない: 問題文に「順番によって完了時刻が変わることはありません」と明記されています。つまり、どの順番で作業を行っても、すべての作業を終えるのにかかる時間は「各作業時間の合計」になります。
時間の単位を揃える: 出発期限 \(T\) と開始時刻 \(S\) は「時」単位で与えられますが、各作業時間 \(A_i\) は「分」単位で与えられます。比較するためには単位を揃える必要があります。
シンプルな比較問題に帰着: 結局のところ、この問題は以下の比較に帰着されます:
- 準備にかかる合計時間 ≤ 使える時間 なら
Yes - そうでなければ
No
- 準備にかかる合計時間 ≤ 使える時間 なら
具体例
例えば、\(S = 9\)(9時開始)、\(T = 12\)(12時までに出発)、作業時間が \([30, 60, 45]\) 分の場合:
- 使える時間: \((12 - 9) \times 60 = 180\) 分
- 必要な時間: \(30 + 60 + 45 = 135\) 分
- \(135 \leq 180\) なので、間に合います → Yes
アルゴリズム
- 全作業にかかる合計時間を計算する:\(\text{total\_time} = \sum_{i=1}^{N} A_i\)
- 出発までに使える時間を分単位で計算する:\(\text{available\_time} = (T - S) \times 60\)
- \(\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: