Submission #1161329

#TimeUsernameProblemLanguageResultExecution timeMemory
116132912345678Table Tennis (info1cup20_tabletennis)C++20
87 / 100
3060 ms5924 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=2e5+5, kx=405;

mt19937 rng(time(0));

int n, k, sz, dp[nx];
vector<int> v ,res;
set<int> s;
vector<pair<int, int>> ran;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>k;
    sz=n+k;
    v.resize(sz);
    for (auto &x:v) cin>>x;
    for (int l=0; l<=k; l++) for (int r=0; r+l<=k; r++) s.insert(v[l]+v[sz-1-r]);
    for (auto x:s) ran.push_back({rng(), x});
    sort(ran.begin(), ran.end());
    for (auto [k, sm]:ran)
    {
        int idx=sz-1, cnt=0;
        for (int i=0; i<sz; i++)
        {
            dp[i]=-1;
            while (idx>i&&v[i]+v[idx]>sm) idx--;
            if (idx<=i) break;
            if (v[i]+v[idx]==sm) dp[i]=idx, cnt+=2;

        }
        //cout<<"sm "<<sm<<' '<<cnt<<'\n';
        if (cnt>=n)
        {
            cnt=n;
            for (int i=0; i<sz; i++)
            {
                if (!cnt) continue;
                if (dp[i]!=-1)
                {
                    res.push_back(v[i]);
                    res.push_back(v[dp[i]]);
                    cnt-=2;
                }
            }
            sort(res.begin(), res.end());
            for (auto x:res) cout<<x<<' ';
            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...