Official
A - 出発までの準備 / Preparations Before Departure Editorial by admin
Qwen3-Coder-480B概要
高橋君がすべての準備作業を終えて、指定された時刻 \(T\) 時 \(0\) 分までに出発できるかどうかを判定する問題です。
考察
この問題では、\(N\) 個の準備作業にそれぞれ \(A_i\) 分かかり、これらを連続して行う必要があります。作業の順序は自由ですが、合計所要時間は変わりません。したがって、すべての作業時間を足し合わせた総時間が重要になります。
例えば、準備開始時刻が \(S = 9\) 時で、作業時間が合計 \(120\) 分(つまり \(2\) 時間)かかる場合、準備完了時刻は \(11\) 時になります。もし出発期限 \(T\) が \(11\) 時以降であれば間に合いますが、\(11\) 時より前であれば間に合いません。
素朴なアプローチとして、各作業を順番にシミュレーションする方法が考えられますが、制約から見ると \(N\) は最大 \(100\)、各作業は最大 \(60\) 分なので、最悪でも総時間が \(6000\) 分程度であり、シミュレーションは不要です。むしろ、作業順は関係なく、合計時間だけを見れば良いことがポイントです。
したがって、すべての作業時間を合計し、開始時刻に加算することで完了時刻を求め、それが \(T\) 時 \(0\) 分以前かどうかを判定すればよいです。
アルゴリズム
- 入力から \(N\), \(S\), \(T\) および作業時間のリスト \(A\) を受け取る。
- すべての作業時間を合計し、
total_minutesを求める。 - 開始時刻 \(S\) を分単位に変換(\(S \times 60\))して
start_timeとする。 - 準備完了時刻
end_timeをstart_time + total_minutesで求める。 - 出発期限 \(T\) も分単位に変換(\(T \times 60\))して
deadlineとする。 end_time <= deadlineならYes、そうでなければNoを出力する。
計算量
- 時間計算量: \(O(N)\)(すべての作業時間を合計するのに線形時間)
- 空間計算量: \(O(1)\)(入力以外の追加的な大きなメモリを使用しない)
実装のポイント
- 時刻を「分」に統一して扱うことで、計算がシンプルになる。
- 作業の順序は結果に影響しないので、合計値だけを考えればよい。
- 制約が小さいので、特別な最適化は必要ない。
## ソースコード
```python
N, S, T = map(int, input().split())
A = list(map(int, input().split()))
total_minutes = sum(A)
start_time = S * 60
end_time = start_time + total_minutes
deadline = T * 60
if end_time <= deadline:
print("Yes")
else:
print("No")
この解説は qwen3-coder-480b によって生成されました。
posted:
last update: