제출 #717269

#제출 시각아이디문제언어결과실행 시간메모리
717269vjudge1Table Tennis (info1cup20_tabletennis)C++17
100 / 100
2693 ms159924 KiB

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define endl '\n'
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>;
int n,k;
void slv(deque<int>dq,int p){
    int kk=k;
    deque<int>a,b;
    while(dq.size()){
        if(dq.size()==1){
            kk--;
            break;
        }
        int f=dq.back();
        dq.pop_back();
        auto it=lower_bound(dq.begin(),dq.end(),p-f);
        if(it==dq.end()||*it!=p-f){
            kk--;
            continue;
        }else{
            while(dq.front()!=*it){
                dq.pop_front();
                kk--;
            }
            a.push_back(dq.front());
            b.push_front(f);
            dq.pop_front();
        }
    }
    if(kk==0){
        for(auto &i:a)cout<<i<<' ';
        for(auto &i:b)cout<<i<<' ';
        exit(0);
    }
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>k;
    deque<int>dq(n+k);
    for(auto &i:dq)cin>>i;
    srand(6433);
    vector<pair<int,int>>v;
    if(k>20&&n>100){
        map<int,int>mp;
        for(int i=0;i<2000000;i++){
            int a=rand()%((int)ceil((n+k)/2.0)+400);
            int l=a+1,r=n+k-1-max(a-400,0ll);
            if(r<l||r>=n+k)continue;
            mp[dq[a]+dq[(rand()%(r-l+1))+l]]++;
        }
        for(auto &i:mp)v.push_back({i.second,i.first});
        sort(v.begin(),v.end());
        for(int i=v.size()-1;i>=0;i--){
            slv(dq,v[i].second);
        }
    }else{
        for(int i=0;i<=k;i++){
            for(int w=0;w<=k-i;w++){
                slv(dq,dq[i]+dq[dq.size()-w-1]);
            }
        }
    }
}
#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...