| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1317732 | Johan | Table Tennis (info1cup20_tabletennis) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
const int B = 1e3 + 5;
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, k;
cin >> n >> k;
int m = n + k;
vector < int > a(m + 1);
map < int , int > is;
for(int i = 1; i <= m; i++){
cin >> a[i];
is[a[i]]++;
}
k += (k == 1);
vector < int > v;
map < int, int > mp;
for(int i = 1; i <= min(k + 4, m); i++){
for(int j = m; j >= max(m - k * 2, 1); j--){
sums.push_back(a[i] + a[j]);
}
}
for(auto i : v)mp[i] += 2;
int mx = 0;
vector < int > sums;
for(auto [x, cnt] : mp){
if(cnt >= mx){
if(cnt == mx)
sums.push_back(x);
else sums = {x};
mx = cnt;
}
}
sort(sums.rbegin(), sums.rend());
while(sums.size() > 200)sums.pop_back();
for(int sum : sums){
int l = 1, r = m;
deque < int > rs;
while(l < r && dq.size() < n){
if(a[l] + a[r] == sum){
dq.push_back(a[l++]);
dq.push_back(a[r--]);
}
else if(a[l] + a[r] > sum){
--r;
}
else{
++l;
}
}
if(rs.size() == n){
for(auto i : rs)
cout << i << ' ';
return 0;
}
}
}
