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\) 分以前かどうかを判定すればよいです。

アルゴリズム

  1. 入力から \(N\), \(S\), \(T\) および作業時間のリスト \(A\) を受け取る。
  2. すべての作業時間を合計し、total_minutes を求める。
  3. 開始時刻 \(S\) を分単位に変換(\(S \times 60\))して start_time とする。
  4. 準備完了時刻 end_timestart_time + total_minutes で求める。
  5. 出発期限 \(T\) も分単位に変換(\(T \times 60\))して deadline とする。
  6. 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: