Official

A - 快適な気温 / Comfortable Temperature Editorial by admin

Gemini 3.0 Flash (Thinking)

概要

\(N\) 日間の気温データ \(T_1, T_2, \dots, T_N\) が与えられるので、その中で指定された範囲 \([L, R]\)\(L\) ℃以上 \(R\) ℃以下)に含まれる気温が何日あるかを数える問題です。

考察

この問題で求められているのは、各日の気温 \(T_i\) が以下の条件を満たしているかどうかを判定することです。 - \(L \leq T_i \leq R\)

\(N\) の最大値は \(10^5\) です。1日ずつ順番に条件を満たしているかチェックしていく素朴な方法(シミュレーション)をとれば、合計 \(N\) 回の判定で答えを求めることができます。 コンピュータは1秒間に数千万回から数億回の計算ができるため、\(N=10^5\) 程度の処理であれば、この方法で制限時間内に十分余裕を持って正解(AC)することができます。

アルゴリズム

以下の手順で解くことができます。

  1. 日数をカウントするための変数 ans\(0\) で初期化する。
  2. \(i = 1\) から \(N\) まで、以下の処理を繰り返す。
    • \(i\) 日目の気温 \(T_i\) を読み込む。
    • もし \(L \leq T_i\) かつ \(T_i \leq R\) であれば、ans の値を \(1\) 増やす。
  3. 最終的な ans の値を出力する。

計算量

  • 時間計算量: \(O(N)\)
    • 全ての気温データを 1 回ずつ確認するため、データの個数 \(N\) に比例した時間がかかります。
  • 空間計算量: \(O(N)\)
    • 今回の実装では sys.stdin.read().split() を用いて入力データを一度に全てリストに格納しているため、入力のサイズに比例したメモリを使用します。

実装のポイント

  • 効率的な入力: \(N\)\(10^5\) と比較的大きいため、Pythonで input()\(N\) 回呼び出すと実行時間が長くなる場合があります。sys.stdin.read().split() を使うことで、標準入力から全てのデータを一括で読み込み、高速に処理することができます。

  • 範囲判定の書き方: Pythonでは L <= temp <= R のように、比較演算子を繋げて書くことができます。これは L <= temp and temp <= R と書くのと同じ意味になり、直感的で簡潔なコードになります。

    ソースコード

import sys

def solve():
    # 標準入力からすべてのデータを読み込み、空白や改行で分割する
    input_data = sys.stdin.read().split()
    if not input_data:
        return
    
    # 最初の3つの値を取得
    N = int(input_data[0])
    L = int(input_data[1])
    R = int(input_data[2])
    
    # 残りのN個の気温データを取得
    T = map(int, input_data[3:])
    
    # 条件を満たす日数をカウント
    ans = 0
    for temp in T:
        if L <= temp <= R:
            ans += 1
            
    # 結果を出力
    print(ans)

if __name__ == "__main__":
    solve()

この解説は gemini-3-flash-thinking によって生成されました。

posted:
last update: