結果
問題 | No.3016 ハチマキおじさん |
ユーザー |
![]() |
提出日時 | 2025-01-25 13:19:24 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 230 ms / 2,000 ms |
コード長 | 2,024 bytes |
コンパイル時間 | 6,167 ms |
コンパイル使用メモリ | 332,648 KB |
実行使用メモリ | 29,296 KB |
最終ジャッジ日時 | 2025-01-25 22:42:56 |
合計ジャッジ時間 | 12,292 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge9 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 31 |
ソースコード
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> // 可変引数repマクロ https://trap.jp/post/1224/ #define rep1(a) for (long long i = 0; i < (long long)a; i++) #define rep2(i, a) for (long long i = 0; i < (long long)a; i++) #define rep3(i, a, b) for (long long i = (long long)a; i <= (long long)b; i++) #define rep4(i, a, b, c) for (long long i = (long long)a; i <= (long long)b; i += (long long)c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define printYesNo(is_ok) puts(is_ok ? "Possible" : "Impossible") #define ALL(v) v.begin(), v.end() #define RALL(v) v.rbegin(), v.rend() #define SORT(v) sort(ALL(v)) #define RSORT(v) sort(RALL(v)) #define REVERSE(v) reverse(ALL(v)) template <class T> using pq_asc = priority_queue<T, vector<T>, greater<T>>; template <class T> using pq_des = priority_queue<T>; template <typename T> void printlnVector(T v) { for (auto n : v) { cout << n << endl; } } template <typename T> void printVector(T v) { for (auto n : v) { cout << n << " "; } cout << endl; } int main() { long long N; cin >> N; vector<pair<long long, int>> A(N), B(N - 1); rep(i, N) { cin >> A[i].first; A[i].second = i + 1; } rep(i, N - 1) { cin >> B[i].first; B[i].second = i + 1; } SORT(A), SORT(B); vector<long long> lefts(N), rights(N); rep(i, N - 1) { lefts[i + 1] = abs(A[i].first - B[i].first); } REVERSE(A), REVERSE(B); rep(i, N - 1) { rights[i + 1] = abs(A[i].first - B[i].first); } REVERSE(A), REVERSE(B); rep(i, lefts.size() - 1) { lefts[i + 1] += lefts[i], rights[i + 1] += rights[i]; } REVERSE(rights); map<long long, set<int>> mp; rep(i, N) { mp[lefts[i] + rights[i]].insert(A[i].first); } cout << mp.begin()->second.size() << endl; for (auto n : mp.begin()->second) { cout << n << " "; } cout << endl; /* printVector(lefts); printVector(rights); */ return 0; }