Submission #1145363

#TimeUsernameProblemLanguageResultExecution timeMemory
1145363tntTable Tennis (info1cup20_tabletennis)C++20
87 / 100
3092 ms5584 KiB
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")

#define pb push_back                    
#define ll long long
#define int long long
//#define sort(all(v)) sort(v.begin(),v.end())

int mod = 998244353;
const int N = 1e6 + 10;
int fact[200001];
ll binpow(ll a, ll b){
	if(b == 0) return 1;
	else if(b % 2 == 1) return (a * binpow(a, b - 1)) % mod;
	ll p = binpow(a,b / 2);
	return (p * p) % mod;
}
signed main(){
    //freopen("stacking.in", "r", stdin);
    //freopen("stacking.out", "w", stdout);
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n,k;
    cin >> n >> k;
    int a[n + k + 1];
    for(int i = 1; i <= n + k; i++) cin >> a[i];
    unordered_map <int,int> cnt;
    for(int i = 1; i <= k + 1; i++){
        for(int j = n + k; j >= n; j--){
            if(i >= j) continue;
            cnt[a[i] + a[j]]++;
            if(cnt[a[i] + a[j]] >= 0){
                vector <pair <int,int>> ans;
                int l = 1,r = n + k;
                int sum = a[i] + a[j];
                while(l < r){
                    //cout << l << " " << r << " " << sum1 << '\n';
                    if(sum > a[l] + a[r]){
                        l++;
                    }
                    else if(sum < a[l] + a[r]){
                        r--;
                    }
                    else{
                        ans.pb({a[l],a[r]});
                        l++;
                        r--;
                    }
                }
                if(ans.size() >= n / 2){
                    int b[n + 1];
                    int pos = 0;
                    for(int h = 1; h <= n / 2; h++){
                        b[h] = ans[pos].first;
                        b[n - h + 1] = ans[pos].second;
                        pos++;
                    }
                    for(int h = 1; h <= n; h++) cout << b[h] << " ";
                    return 0;
                }
                cnt[a[i] + a[j]] = -10000000;
            }
        }
    }
}
#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...