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)することができます。
アルゴリズム
以下の手順で解くことができます。
- 日数をカウントするための変数
ansを \(0\) で初期化する。 - \(i = 1\) から \(N\) まで、以下の処理を繰り返す。
- \(i\) 日目の気温 \(T_i\) を読み込む。
- もし \(L \leq T_i\) かつ \(T_i \leq R\) であれば、
ansの値を \(1\) 増やす。
- 最終的な
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: