結果

問題 No.3363 Two Closest Numbers
コンテスト
ユーザー ponjuice
提出日時 2025-11-17 21:19:04
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,564 bytes
コンパイル時間 3,432 ms
コンパイル使用メモリ 284,576 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-11-17 21:19:29
合計ジャッジ時間 6,257 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 53 WA * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const ll INF = LLONG_MAX / 4;
#define rep(i, a, b) for(ll i = a; i <(b); i++)
#define all(a) begin(a),end(a)
#define sz(a) ssize(a)
bool chmin(auto& a,auto b){return a > b ? a = b,1 : 0;}
bool chmax(auto& a,auto b){return a < b ? a = b,1 : 0;}
const ll mod = 998244353;

int main(){
    cin.tie(0)->sync_with_stdio(0);

    int n;
    cin >> n;
    vector<int> a(n);
    rep(i,0,n) cin >> a[i];
    sort(all(a));
    if(n % 2 == 0) {
        vector<int> cnt(10);
        rep(i,0,n){
            cnt[a[i]]++;
        }
        vector<int> nokori;
        rep(i,0,10){
            if(cnt[i] % 2 == 1){
                nokori.push_back(i);
            }
        }
        ll ans = INF;
        if(nokori.size() == 0) ans = 0; 
        do {
            int m = nokori.size();
            ll l = 0;
            ll r = 0;
            rep(i,0,m/2){
                l = l * 10 + nokori[i];
            }
            rep(i,m/2,m){
                r = r * 10 + nokori[i];
            }
            ans = min(ans, abs(l - r));
        } while(next_permutation(all(nokori)));

        cout << ans % mod << endl;
    } else {
        vector<int> l,r;
        l.push_back(a[0]);
        rep(i,1,n) {
            if(i >= n-i) break;
            l.push_back(a[i]);
            r.push_back(a[n-i]);
        }

        ll L = 0, R = 0;
        rep(i,0,l.size()) L = (L*10 + l[i]) % mod;
        rep(i,0,r.size()) R = (R*10 + r[i]) % mod;
        cout << (L - R + mod) % mod << endl;
    }
}
0