結果

問題 No.3185 Three Abs
ユーザー srjywrdnprkt
提出日時 2025-07-25 17:28:58
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 258 ms / 2,000 ms
コード長 1,240 bytes
コンパイル時間 3,494 ms
コンパイル使用メモリ 281,336 KB
実行使用メモリ 7,936 KB
最終ジャッジ日時 2025-07-25 17:29:12
合計ジャッジ時間 12,656 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
//#include <atcoder/modint>

using namespace std;
//using namespace atcoder;
using ll = long long;
//using mint = modint998244353;

void solve(){
    ll N, A, ans=0;
    cin >> N;
    vector<ll> S(N+1), MX(N+1), MI(N+1);
    for (int i=1; i<=N; i++){
        cin >> A;
        S[i] = S[i-1] + A;
        MX[i] = max(MX[i-1], S[i]);
        MI[i] = min(MI[i-1], S[i]);
    }
    vector<ll> v={-1,1};
    for (auto a : v){
        for (auto b : v){
            for (auto c : v){
                for (int i=1; i<N; i++){
                    ans = max({ans, (a-b)*MI[i-1]+S[i]*(b-c)+c*S[N], (a-b)*MX[i-1]+S[i]*(b-c)+c*S[N]});
                }
            }
        }
    }
    cout << ans << endl;
}

int main(){
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);

    /*
       S_{i<j} = a (S_i) + b (S_N-S_i-(S_N-S_j)) + c (S_N-S_j)
       S_{i<j} = S_i (a-b) + S_j (b-c) + c S_N 
       について、{a,b,c} in [-1,1]の8通りを考えれば良い。
       
       MX(j) = max(S_0, ..., S_j)
       MI(j) = min(S_0, ..., S_j)
       とすると
       (a-b)<0のときはMI(j)*(a-b) + S_j*(b-c) + b S_Nの最大値を取る。
    */

    int T;
    cin >> T;
    while(T--) solve();

    return 0;
}
0