제출 #1231737

#제출 시각아이디문제언어결과실행 시간메모리
1231737SolikhaTable Tennis (info1cup20_tabletennis)C++20
0 / 100
1006 ms297280 KiB
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define ss second
#define ff first
#define pb push_back 

void solve(){
  int n, k; cin >> n >> k;
  int N = n + k;
  map<int, int> mp;
  vector<int> v(N);
  for(int i = 0; i < N; i++){
    cin >> v[i];
    mp[v[i]]++;
  }

  sort(all(v));
  vector<int> ans;
  auto get = [&](int m) -> int {
    int a = 0, b = 0;
    for(int i = 0; i < N; i++){
      int x = m - v[i];
      if(mp[x] == 1 && x != v[i]){
        if(x > v[i]){
          ans.pb(v[i]);
          ans.pb(x);
        }
      }else if(x > v[i]) b++;
      else if(x < v[i]) a++;
      if(ans.size() == n) break;
    }
    
    if(ans.size() == n) return 3;
    if(a <= b) return 2;
    return 1;
  };
  

  int l = 1, r = v[N - 1] + v[N - 2];
  while(l <= r){
    int m = (l + r + 1) / 2;
    ans.clear();
    int x = get(m);
    //cerr << x << ' ' << m << endl;
    if(x == 3) break;
    if(x == 2) r = m - 1;
    else l = m + 1;
  }

  sort(all(ans));
  for(int &i : ans) cout << i << ' ';
}
 
signed main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  int t = 1; //cin >> t;
  while(t--){
    solve();
    cout << endl;
  }
  return 0;
}
#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...