A - 出発までの準備 / Preparations Before Departure 解説 by admin
Gemini 3.0 Flash概要
\(N\) 個の準備作業にかかる合計時間が、準備開始時刻 \(S\) から出発期限時刻 \(T\) までの時間(分単位)に収まるかどうかを判定する問題です。
考察
この問題を解くためのポイントは、「利用可能な時間」と「必要な時間」を同じ単位(分)で比較することです。
利用可能な時間の計算: 高橋君は \(S\) 時から \(T\) 時まで準備ができます。この間の時間は \((T - S)\) 時間です。 \(1\) 時間は \(60\) 分なので、分単位に直すと \((T - S) \times 60\) 分となります。 制約より \(S \leq T\) であるため、この値が負になることはありません。
必要な合計時間の計算: \(N\) 個の作業があり、それぞれの作業に \(A_i\) 分かかります。作業は連続して行うため、単純にすべての \(A_i\) を足し合わせた合計が、必要な総時間となります。 問題文に「順番によって完了時刻が変わることはない」とある通り、作業の順番を考慮する必要はありません。
判定条件: 「必要な合計時間 \(\leq\) 利用可能な時間」であれば、期限である \(T\) 時 \(0\) 分までに準備を終えることができるため
Yes、そうでなければNoとなります。
アルゴリズム
- 入力から \(N, S, T\) および各作業時間 \(A_1, A_2, \dots, A_N\) を受け取ります。
- 利用可能な時間を計算します:
available_minutes = (T - S) * 60 - 作業時間の合計を計算します:
total_required_minutes = sum(A) total_required_minutes <= available_minutesかどうかを判定し、結果を出力します。
計算量
- 時間計算量: \(O(N)\)
- \(N\) 個の作業時間の合計を求めるために、リストを 1 回走査する必要があるためです。
- 空間計算量: \(O(N)\)
- 入力された \(N\) 個の作業時間をリストに格納するために \(O(N)\) のメモリを使用します。
実装のポイント
単位の統一: 時刻(時)を分に変換する際、 \(60\) を掛けるのを忘れないようにしましょう。
合計の算出: Python では
sum()関数を使うことで、リストの合計値を簡潔に計算できます。ソースコード
import sys
def solve():
# 入力を取得
input_data = sys.stdin.read().split()
if not input_data:
return
# N, S, T を取得
n = int(input_data[0])
s = int(input_data[1])
t = int(input_data[2])
# 各作業にかかる時間 A_i を取得
a = list(map(int, input_data[3:]))
# 利用可能な時間を分単位で計算
available_minutes = (t - s) * 60
# 必要な合計時間を計算
total_required_minutes = sum(a)
# 判定と出力
if total_required_minutes <= available_minutes:
print("Yes")
else:
print("No")
if __name__ == "__main__":
solve()
この解説は gemini-3-flash-preview によって生成されました。
投稿日時:
最終更新: