Official

A - 温度センサーの点検 / Inspection of Temperature Sensors Editorial by admin

Qwen3-Coder-480B

概要

一列に並んだ温度センサーの計測値から、各センサーの「局所温度指標」を計算し、その最大値を求めます。

考察

この問題では、各センサーに対して「自分と隣接するセンサーの計測値の和」である局所温度指標を計算し、その最大値を求める必要があります。

センサーの位置によって計算方法が異なることに注意が必要です: - 端のセンサー(最初と最後)は、隣が片方にしかないので、2つの値の和になります。 - それ以外のセンサーは、前後のセンサーも含めた3つの値の和になります。

例えば、入力が 5 で計測値が [10, -5, 3, 2, 8] の場合: - センサー1: \(10 + (-5) = 5\) - センサー2: \(10 + (-5) + 3 = 8\) - センサー3: \(-5 + 3 + 2 = 0\) - センサー4: \(3 + 2 + 8 = 13\) - センサー5: \(2 + 8 = 10\)

この中で最大は \(13\) です。

素朴なアプローチとして、全センサーについて毎回和を計算して最大値を更新していく方法があります。制約より、センサーの数 \(N\) は最大で \(2 \times 10^5\) なので、各センサーにつき定数時間で処理できれば間に合います。Pythonなどの言語でも十分高速に動作します。

アルゴリズム

  1. 入力からセンサー数 \(N\) と計測値リスト \(A\) を受け取る。
  2. 最大値を保持する変数 max_indicator を負の無限大で初期化する。
  3. 最初のセンサー(インデックス0)の局所温度指標を計算し、最大値を更新。
  4. 真ん中のセンサー(インデックス1〜\(N-2\))に対して、それぞれ3項の和を計算し、最大値を更新。
  5. 最後のセンサー(インデックス\(N-1\))の局所温度指標を計算し、最大値を更新。
  6. 最終的な最大値を出力する。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(N)\)

実装のポイント

  • インデックスの範囲に注意すること(特に最初と最後のセンサー)。
  • 各指標を計算するたびに最大値を更新することで、最後に一度だけ最大値を探す必要がない。
  • Pythonの float('-inf') を使うことで、最初の比較を簡単に行える。
## ソースコード

```python
N = int(input())
A = list(map(int, input().split()))

max_indicator = float('-inf')

# 最初のセンサー (i=1)
M1 = A[0] + A[1]
if M1 > max_indicator:
    max_indicator = M1

# 中間のセンサー (1 < i < N)
for i in range(1, N-1):
    Mi = A[i-1] + A[i] + A[i+1]
    if Mi > max_indicator:
        max_indicator = Mi

# 最後のセンサー (i=N)
MN = A[N-2] + A[N-1]
if MN > max_indicator:
    max_indicator = MN

print(max_indicator)

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: