Submission #1318232

#TimeUsernameProblemLanguageResultExecution timeMemory
1318232ElayV13Table Tennis (info1cup20_tabletennis)C++17
57 / 100
3094 ms22916 KiB
//g++ -o sol sol.cpp
//cd C:\Users\Asus-1\OneDrive\Desktop
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ld long double
const int INF = 1e18;
const int N = 100001;
#define S(a) a.begin() , a.end()
#define pb push_back
#define READ(l , r , a) for(int i = l;i <= r;i++) cin >> a[i]
#define printV(l , r , a) for(int i = l;i <= r;i++) cout << a[i] << ' ';
#define pii pair < int , int >
#define FOR(i , l , r) for(int i = l;i <= r;i++)
int n , k;
vector < int > a;
bool check(int val){
	map < int , int > mp;
	for(int &i : a) mp[i]++;
	int cnt = 0;
	for(int i = 0;i < n + k;i++){
		int need = 1;
		if(a[i] == val - a[i]) ++need;
		if(mp[a[i]] >= need && mp[val - a[i]] >= need){
			++cnt;
			--mp[a[i]];
			--mp[val - a[i]];
		}
	}
	return (cnt >= n / 2);
}
vector < int > get_res(int val){
	vector < int > res;
	map < int , int > mp;
	for(int &i : a) mp[i]++;
	int cnt = 0;
	for(int i = 0;i < n + k;i++){
		int need = 1;
		if(a[i] == val - a[i]) ++need;
		if(mp[a[i]] >= need && mp[val - a[i]] >= need){
			++cnt;
			--mp[a[i]];
			--mp[val - a[i]];
			res.push_back(a[i]);
			res.push_back(val - a[i]);
		}
		if(res.size() == n) break;
	}
	return res;
}
signed main(){
        ios_base::sync_with_stdio();
        cin.tie(0);
	cout.tie(0);
	cin >> n >> k; a.resize(n + k);
	READ(0 , n + k - 1 , a);
	sort(S(a));
	vector < pii > all;
	map < int , int > cnt;
	for(int i = 0;i <= k;i++){
		for(int j = n - 1;j < n + k;j++){
			cnt[a[i] + a[j]]++;
		}
	}
	for(int i = 0;i <= k;i++){
		for(int j = n - 1;j < n + k;j++){
			all.push_back({cnt[a[i] + a[j]] , a[i] + a[j]});
		}
	}
	sort(all.begin() , all.end());
	vector < int > pos;
	for(int i = all.size() - 1;i >= 0;i--)
	{
		pos.push_back(all[i].second);
		if(pos.size() == 500) break;
	}
	for(int vl : pos){
		bool can = check(vl);
		vector < int > res;
		if(can) res = get_res(vl);
		else continue;
		sort(S(res));
		printV(0 , n - 1 , res);
		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...