結果
| 問題 |
No.3363 Two Closest Numbers
|
| コンテスト | |
| ユーザー |
AK_Mi
|
| 提出日時 | 2025-11-18 13:38:23 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,730 bytes |
| コンパイル時間 | 5,856 ms |
| コンパイル使用メモリ | 334,996 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-11-18 13:38:34 |
| 合計ジャッジ時間 | 10,239 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 42 WA * 17 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using ld = long double;
int main(){
ll n;
cin >> n;
vector<ll> num(10,0);
ll c;
for(ll i = 0; i < n; i++){
cin >> c;
num[c]++;
}
if(n % 2 == 1){
deque<ll> big;
deque<ll> small;
ll s = (n-1)/2;
for(ll i = 0; i < 10; i++){
for(ll t = 0; t < num[i]; t++){
big.push_back(i);
}
}
for(ll i = 0; i < s; i++){
small.push_back(big.back());
big.pop_back();
}
ll ans = 0;
ll kake = 1;
for(ll i = 0; i < s; i++){
ans += (big.back() - small.back()) * kake;
ans %= 998244353;
kake *= 10;
kake %= 998244353;
big.pop_back();
small.pop_back();
}
ans += big.back() * kake;
ans %= 998244353;
cout << ans << '\n';
}else{
vector<ll> nokori;
for(ll i = 0; i < 10; i++){
num[i] %= 2;
if(num[i] == 1)nokori.push_back(i);
}
ll s = nokori.size()/2;
ll minn = -1;
do{
ll a = 0;
ll b = 0;
for(ll i = 0; i < s; i++){
a *= 10;
a += nokori[i];
}
for(ll i = 0; i < s; i++){
b *= 10;
b += nokori[i+s];
}
if(abs(a-b) < minn || minn == -1){
minn = abs(a-b);
}
}while(next_permutation(nokori.begin(),nokori.end()));
cout << minn << '\n';
}
return 0;
}
AK_Mi