結果

問題 No.3016 ハチマキおじさん
ユーザー srjywrdnprkt
提出日時 2025-03-13 00:12:14
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 87 ms / 2,000 ms
コード長 1,138 bytes
コンパイル時間 3,947 ms
コンパイル使用メモリ 283,304 KB
実行使用メモリ 8,480 KB
最終ジャッジ日時 2025-03-13 00:12:23
合計ジャッジ時間 8,443 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 31
権限があれば一括ダウンロードができます

ソースコード

diff #

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

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

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

    ll N, mi=1e18, sm=0;
    vector<ll> v;
    cin >> N;

    /*
       i=N, N-1, ..., 1の順に取り除く。
       iを削除してi+1を追加するときの差分は
       -abs(A[i]-B[i])+abs(A[i+1]-B[i])
    */

    vector<ll> a(N+1), b(N);
    for (int i=1; i<=N; i++) cin >> a[i];
    for (int i=1; i<=N-1; i++) cin >> b[i];
    sort(a.begin(), a.end());
    sort(b.begin(), b.end());

    for (int i=1; i<=N-1; i++) sm += abs(a[i]-b[i]);
    mi = sm;
    v.push_back(a[N]);
    for (int i=N-1; i>=1; i--){
        sm += abs(a[i+1]-b[i])-abs(a[i]-b[i]);
        if (mi > sm){
            mi = sm;
            v.clear();
            v.push_back(a[i]);
        }
        else if (mi == sm) v.push_back(a[i]);
    }
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    cout << v.size() << endl;
    for (auto z : v) cout << z << " ";
    cout << endl;

    return 0;
}
0