Submission #1319658

#TimeUsernameProblemLanguageResultExecution timeMemory
1319658bearrbearrTable Tennis (info1cup20_tabletennis)C++20
100 / 100
547 ms5548 KiB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back
const int maxn=2e5;

ii a[maxn+1];
int n,k;
vector<int>ans;

bool bisa(int sum){
    ans.clear();
    int r=n+k;
    for(int l=1;l<=n+k && l<=r;l++){
        while(a[l].fir+a[r].fir>sum && r>0)r--;
        if(l>=r)break;

        if(a[l].fir+a[r].fir==sum){
            ans.push_back(a[l].fir); ans.push_back(a[r].fir);
            r--;
        }
    }

    if(ans.size()>=n)return true;
    return false;
}

mt19937 rnd(232323);

signed main(){
    cin>>n>>k;
    for(int q=1;q<=n+k;q++){
        cin>>a[q].fir;
        a[q].sec=q;
    }
    sort(a+1,a+n+k+1);

    uniform_int_distribution<int>uid(1,n+k-1);
    while(true){
        int satu=uid(rnd);
        bool yey=false;

        for(int lain=n+1-satu;lain<=n+k;lain++){
            if(lain<=0)continue;
            if(satu>k){
                int mx=n+2*k+1-lain;
                if(mx<lain)break;
            }
            bool ok=bisa(a[lain].fir+a[satu].fir);
            if(ok){ 
                yey=true;
                break;
            }
        }
        if(yey)break;
    }
    sort(ans.begin(),ans.end());
    for(auto x : ans){
        cout<<x<<' ';
    }
    cout<<endl;
}
#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...