公式

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

Gemini 3.0 Flash

概要

\(N\) 個の準備作業にかかる合計時間が、準備開始時刻 \(S\) から出発期限時刻 \(T\) までの時間(分単位)に収まるかどうかを判定する問題です。

考察

この問題を解くためのポイントは、「利用可能な時間」と「必要な時間」を同じ単位(分)で比較することです。

  1. 利用可能な時間の計算: 高橋君は \(S\) 時から \(T\) 時まで準備ができます。この間の時間は \((T - S)\) 時間です。 \(1\) 時間は \(60\) 分なので、分単位に直すと \((T - S) \times 60\) 分となります。 制約より \(S \leq T\) であるため、この値が負になることはありません。

  2. 必要な合計時間の計算: \(N\) 個の作業があり、それぞれの作業に \(A_i\) 分かかります。作業は連続して行うため、単純にすべての \(A_i\) を足し合わせた合計が、必要な総時間となります。 問題文に「順番によって完了時刻が変わることはない」とある通り、作業の順番を考慮する必要はありません。

  3. 判定条件: 「必要な合計時間 \(\leq\) 利用可能な時間」であれば、期限である \(T\)\(0\) 分までに準備を終えることができるため Yes、そうでなければ No となります。

アルゴリズム

  1. 入力から \(N, S, T\) および各作業時間 \(A_1, A_2, \dots, A_N\) を受け取ります。
  2. 利用可能な時間を計算します: available_minutes = (T - S) * 60
  3. 作業時間の合計を計算します: total_required_minutes = sum(A)
  4. 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 によって生成されました。

投稿日時:
最終更新: