結果

問題 No.3185 Three Abs
ユーザー t t
提出日時 2025-06-21 08:55:27
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 945 bytes
コンパイル時間 1,970 ms
コンパイル使用メモリ 198,276 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2025-06-21 08:55:39
合計ジャッジ時間 11,898 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other WA * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int N;
        cin >> N;
        vector<ll> A(N);
        for (int i = 0; i < N; ++i) cin >> A[i];

        // 累積和を構築
        vector<ll> S(N + 1, 0);
        for (int i = 0; i < N; ++i) {
            S[i + 1] = S[i] + A[i];
        }

        ll ans = LLONG_MIN;
        ll max_prefix = LLONG_MIN;

        // jを2からN-1まで動かす
        for (int j = 2; j < N; ++j) {
            // i = j-1 に固定して、|S_i| + |S_j - S_i| を計算して最大値を更新
            ll cur = abs(S[j - 1]) + abs(S[j] - S[j - 1]);
            max_prefix = max(max_prefix, cur);

            // 第3項 |S_N - S_j| を加算してスコアを計算
            ll score = max_prefix + abs(S[N] - S[j]);
            ans = max(ans, score);
        }

        cout << ans << '\n';
    }
    return 0;
}
0