A - 気温予報の誤差分析 / Error Analysis of Temperature Forecasts 解説 by admin
Claude 4.6 Opus (Thinking)概要
各地点について予報誤差の合計を計算し、その最大値を求める問題です。定義に従って素直に計算すれば解けます。
考察
この問題では、\(N\) 個の地点それぞれについて \(D\) 日間の予報誤差の合計 \(S_i\) を求め、その最大値を出力します。
- 地点 \(i\) の予報気温は毎日同じ値 \(T_i\) である
- 予報誤差は \(|A_{i,j} - T_i|\)(絶対値)で定義される
- 各地点について \(D\) 日分の誤差を合計し、全地点の中で最大のものを求める
特別なアルゴリズムは不要で、定義通りに計算すれば十分です。制約として \(N \times D \leq 10^6\) が保証されているため、全データを走査しても計算量は問題ありません。
具体例
例えば \(N=2, D=3\)、予報気温が \(T = [10, 20]\)、実際の気温が: - 地点1: \([12, 8, 15]\) - 地点2: \([25, 18, 20]\)
の場合: - \(S_1 = |12-10| + |8-10| + |15-10| = 2 + 2 + 5 = 9\) - \(S_2 = |25-20| + |18-20| + |20-20| = 5 + 2 + 0 = 7\)
最大値は \(\max(9, 7) = 9\) となります。
アルゴリズム
- \(N\) と \(D\) を読み込む
- 予報気温 \(T_1, T_2, \ldots, T_N\) を読み込む
- 各地点 \(i\) について:
- 実際の気温 \(A_{i,1}, \ldots, A_{i,D}\) を読み込む
- \(S_i = \sum_{j=1}^{D} |A_{i,j} - T_i|\) を計算する
- \(S_1, S_2, \ldots, S_N\) の最大値を出力する
計算量
- 時間計算量: \(O(N \times D)\)(各地点の各日について誤差を1回ずつ計算)
- 空間計算量: \(O(D)\)(1地点分の実際の気温を保持するだけで十分)
\(N \times D \leq 10^6\) の制約があるため、十分高速に動作します。
実装のポイント
全地点の気温データを一度にメモリに読み込む必要はなく、1地点ずつ処理すればメモリを節約できます。コードでは
for i in range(N)のループ内で各地点のデータを読み込み、即座に \(S_i\) を計算しています。ans変数を0で初期化し、各 \(S_i\) を計算するたびにmaxで更新することで、最終的に最大値が得られます(\(S_i \geq 0\) は絶対値の和なので常に成り立つため、初期値0で問題ありません)。ソースコード
N, D = map(int, input().split())
T = list(map(int, input().split()))
ans = 0
for i in range(N):
A = list(map(int, input().split()))
s = sum(abs(a - T[i]) for a in A)
ans = max(ans, s)
print(ans)
この解説は claude4.6opus-thinking によって生成されました。
投稿日時:
最終更新: