公式

A - 温度センサーの点検 / Inspection of Temperature Sensors 解説 by MMNMM


初心者の方へ

この問題は、for 文などを使って \(M _ 1,M _ 2\ldots,M _ N\) の値を計算し、それらの最大値を求めることで解くことができます。

\(A _ 0=A _ {N+1}=0\) を番兵として追加しておくことで、\(M _ i\) を求める際の場合分けを減らすこともできます。

実装例は以下のようになります。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int N;
    cin >> N;
    vector<int> A(N);
    for (int& a : A) {
        cin >> a;
    }
    // 先頭と末尾に 0 を追加しておく
    A.emplace(begin(A));
    A.emplace_back();

    // M の最大値を求める
    long ans = -3000000000;
    for (int i = 0; i < N; ++i) {
        ans = max(ans, 0L + A[i] + A[i + 1] + A[i + 2]);
    }
    cout << ans << endl;
    return 0;
}
N = int(input())

# 先頭と末尾に 0 を追加しておく
A = [0] + list(map(int, input().split())) + [0]

# M の最大値を求める
print(max(map(sum, zip(A, A[1:], A[2:]))))

投稿日時:
最終更新: