結果
| 問題 |
No.3016 ハチマキおじさん
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-01-25 14:41:48 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 184 ms / 2,000 ms |
| コード長 | 1,031 bytes |
| コンパイル時間 | 3,493 ms |
| コンパイル使用メモリ | 283,620 KB |
| 実行使用メモリ | 10,240 KB |
| 最終ジャッジ日時 | 2025-01-25 23:27:18 |
| 合計ジャッジ時間 | 7,260 ms |
|
ジャッジサーバーID (参考情報) |
judge7 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 31 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
cin >> n;
vector<int> a(n,0),b(n - 1,0);
for (int i = 0;i < n;i++) {
cin >> a[i];
}
for (int i = 0;i < n - 1;i++) {
cin >> b[i];
}
sort(a.begin(),a.end()); sort(b.begin(),b.end());
vector<int> r(n,0);
int temp1 = 0,temp2 = 0;
for (int i = n - 1;1 <= i;i--) {
r[i] = temp2;
temp2 += abs(a[i] - b[i - 1]);
}
r[0] = temp2;
int min_ = INT_MAX;
set<int> ans = {};
for (int i = 0;i < n;i++) {
if (min_ > temp1 + r[i]) {
ans.clear();
ans.insert(a[i]);
min_ = temp1 + r[i];
} else if (min_ == temp1 + r[i]) {
//cout << i << endl;
ans.insert(a[i]);
}
//cout << temp1 << " " << r[i] << endl;
if (i != n - 1) {
temp1 += abs(a[i] - b[i]);
}
}
cout << ans.size() << endl;
for (int i : ans) {
cout << i << " ";
}
cout << endl;
}