結果

問題 No.3268 As Seen in Toasters
ユーザー Jikky1618
提出日時 2025-09-12 23:51:41
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 45 ms / 2,000 ms
コード長 1,633 bytes
コンパイル時間 3,240 ms
コンパイル使用メモリ 288,876 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-09-12 23:51:49
合計ジャッジ時間 5,786 ms
ジャッジサーバーID
(参考情報)
judge4 / judge7
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #

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

#ifdef LOCAL
#include <debug.hpp>
#include <misc.hpp>
#else
#define debug(...)
#endif

constexpr ll INF = 1LL << 60;

ll naive(int N, vector<ll> A) {
    auto f = [](int x, int y) -> ll { return (x < 0 && y < 0) ? -(x + y) : abs(x - y); };
    ranges::sort(A);
    ll ans = INF;
    do {
        ll val = 0;
        for (int i = 0; i + 1 < N; i++) val += f(A[i], A[i + 1]);
        ans = min(ans, val);
    } while (next_permutation(A.begin(), A.end()));
    return ans;
}

ll solve(int N, vector<ll> A) {
    auto f = [](int x, int y) -> ll { return (x < 0 && y < 0) ? -(x + y) : abs(x - y); };
    ll ans = INF;
    ranges::sort(A);
    {
        ll val = 0;
        for (int i = 0; i + 1 < N; i++) val += f(A[i], A[i + 1]);
        ans = min(ans, val);
    }
    ranges::rotate(A, A.begin() + 1);
    {
        ll val = 0;
        for (int i = 0; i + 1 < N; i++) val += f(A[i], A[i + 1]);
        ans = min(ans, val);
    }
    return ans;
}

// void test() {
//     int t;
//     cin >> t;
//     while (t--) {
//         int N = rng(3, 8);
//         vector<ll> A(N);
//         for (int i = 0; i < N; i++) A[i] = rng(-1e9, 1e9);
//         ll ans1 = naive(N, A);
//         ll ans2 = solve(N, A);
//         if (ans1 != ans2) {
//             debug(N, A, ans1, ans2);
//             assert(false);
//         }
//     }
// }

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);
    int N;
    cin >> N;
    vector<ll> A(N);
    for (int i = 0; i < N; i++) cin >> A[i];
    cout << solve(N, A) << "\n";
}
0