結果

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

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int main()
{
  int n;
  cin >> n;
  if (n % 2)
  {
    vector<int> c(n);
    for (int i = 0; i < n; ++i) cin >> c[i];
    sort(c.begin(), c.end());
    vector<int> v(n);
    for (int i = n / 2; i > 0; --i)
    {
      int id = n / 2 - i;
      v[id] += c[i] - c[i + n / 2];
      if (v[id] < 0)
      {
        --v[id + 1];
        v[id] = (v[id] + 10) % 10;
      }
    }
    v[n / 2] += c[0];
    for (int i = n - 1; i >= 0; --i)
    {
      if (v[i])
      {
        while (i >= 0)
        {
          cout << v[i];
          --i;
        }
        cout << endl;
      }
    }
    return 0;
  }
  vector<int> cnt(10);
  for (int i = 0; i < n; ++i)
  {
    int a;
    cin >> a;
    ++cnt[a];
  }
  for (int i = 0; i < 10; ++i) cnt[i] %= 2;
  vector<int> p;
  for (int i = 0; i < 10; ++i) if (cnt[i]) p.push_back(i);
  long long ans = 1e18;
  int siz = p.size();
  if (siz)
  {
    do
    {
      long long v1 = 0, v2 = 0;
      for (int i = 0; i < siz / 2; ++i) v1 = v1 * 10 + p[i];
      for (int i = siz / 2; i < siz; ++i) v2 = v2 * 10 + p[i];
      ans = min(ans, abs(v1 - v2));
    }
    while (next_permutation(p.begin(), p.end()));
  }
  else ans = 0;
  cout << ans << endl;
}
0