Submission #717260

#TimeUsernameProblemLanguageResultExecution timeMemory
717260vjudge1Table Tennis (info1cup20_tabletennis)C++17
87 / 100
3088 ms161036 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(543634); vector<pair<int,int>>v; if(k>20&&n>100){ map<int,int>mp; for(int i=0;i<2000000;i++)mp[abs(dq[rand()%(n)]+dq[rand()%n])]++; 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...