제출 #1318310

#제출 시각아이디문제언어결과실행 시간메모리
1318310AzeTurk810Table Tennis (info1cup20_tabletennis)C++20
87 / 100
3092 ms130904 KiB
/* Telebe of Adicto && Mamedov yani AzeTurk810 I see humans but no humanity */ #include <algorithm> #include <cassert> #include <functional> #include <iostream> #include <map> #include <set> #include <utility> #include <vector> // mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); using ll = long long; using namespace std; #define ln '\n' #define INFi 1e9 #define INFll 1e18 #define int ll // #undef ONPC #ifdef ONPC #include <algo.hpp> #else #define dbg(...) #define dbg_out(...) #endif char solve() { int N, K; if (!(cin >> N >> K)) return 1; int M = N + K; vector<int> A(M); for (int i = 0; i < M; i++) cin >> A[i]; sort(A.begin(), A.end()); vector<int> sums; for (int i = 0; i <= min(M - 1, K * 3); i++) { for (int j = M - 1; j >= max(0LL, M - K * 3 - 2); --j) { sums.push_back(A[i] + A[j]); } } sort(sums.begin(), sums.end()); { vector<int> nsum; map<int, int> cnt; for (int i = 0; i < sums.size(); i++) { cnt[sums[i]]++; } vector<pair<int, int>> temp; for (auto [sum, cnt] : cnt) { temp.emplace_back(cnt, sum); } sort(temp.begin(), temp.end(), greater<>()); for (int i = 0; i < min<ll>(temp.size(), 100); i++) { nsum.push_back(temp[i].second); } nsum.swap(sums); } // sums.erase(unique(sums.begin(), sums.end()), sums.end()); for (int sum : sums) { dbg(sum); multiset<int> mst, res; for (int i = 0; i < M; i++) { int tar = sum - A[i]; auto it = mst.find(tar); if (it != mst.end()) { res.insert(tar); res.insert(A[i]); mst.erase(it); } else { mst.insert(A[i]); } } if (res.size() >= N) { dbg(res); mst.swap(res); vector<int> ans; for (int i : mst) { ans.push_back(i); } int i = 0, j = ans.size() - 1; vector<int> res; while (i < j) { res.push_back(ans[i++]); res.push_back(ans[j--]); } sort(res.begin(), res.end()); for (int i = 0; i < N; i++) { cout << res[i] << ' '; } cout << ln; return 0; } } assert(0); return 0; } // Attack on titan<3 signed main() { ios::sync_with_stdio(0); cin.tie(nullptr); int t = 1e9; // cin >> t; for (int cases = 0; cases < t; cases++) { if (solve()) break; #ifdef ONPC cerr << "__________\n"; #endif } } // Just Imaginary /* ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠀⠀⠀⢀⣴⣾⠀⠀⠀⡀⢀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣦⣾⣿⣿⣿⣿⣿⡆⠁⠀⢀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⡠⠂⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠠⠔⠚⣿⣿⣿⣿⣿⣦⡄⠀⠁⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⢀⠠⠐⢂⠉⡀⣀⣤⣄⢻⣿⣿⡟⢈⡹⣿⡀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⡀⠄⠂⠈⠀⣶⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠘⣷⡀⠀⡀⠐⠂⠐⢄ ⠀⠀⠀⠀⠀⠀⠀⣿⣿⠟⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣀⣾⣷⠯⠀⠤⠤⠄⠈ ⠀⠀⠀⠀⠀⠀⣼⣿⡟⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⢠⣾⣿⣿⣿⣿⣿⣭⠟⢻⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀ ⠀⠀⠀⣀⣶⡟⠁⠀⢾⣶⣿⠟⠉⠈⢻⣿⣿⣿⣦⣜⠀⠛⠛⠿⠁⠀⠀⠀⠀⠀ ⠚⠻⠿⠿⡿⠁⠀⢠⣿⣿⠁⠀⣠⠖⠋⠉⠻⣿⣿⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣰⣿⡿⠃⠠⠊⠁⠀⠀⠀⠀⠈⢿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⣴⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⣠⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢀⣴⠾⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...