Submission #365753

#TimeUsernameProblemLanguageResultExecution timeMemory
365753amunduzbaevTable Tennis (info1cup20_tabletennis)C++14
100 / 100
666 ms5860 KiB
/** made by amunduzbaev **/ #include <bits/stdc++.h> using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define NeedForSpeed ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vv vector #define int long long typedef long long ll; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<ll> vll; typedef vector<int> vii; typedef vector<pll> vpll; typedef vector<pii> vpii; typedef pair<int, pii> ipii; typedef pair<pii, int> piii; template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} const int N = 2e5+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); #define MULTI 0 int n, m, k, ans, res, a[N]; /* 4 2 1 2 3 4 8 20 4 2 1 2 5 7 8 100 6 2 1 3 4 5 6 7 8 11 6 2 1 2 3 5 7 8 9 15 4 2 100 200 1 2 3 4 */ bool check(int s){ int l = 0, r = m-1, res = 0; while(l < r){ if(a[l] + a[r] == s) { res+=2, l++, r--; continue; } if(a[l] + a[r] > s) r--; else l++; } //cout<<s<<" "<<res<<"\n"; if(res >= n){ vii tt; int l = 0, r = m-1; while(l < r){ if(a[l] + a[r] == s) { tt.pb(a[l]), tt.pb(a[r]), l++, r--; } else if(a[l] + a[r] > s) r--; else l++; if(sz(tt) >= n) break; } sort(all(tt)); for(auto x:tt) cout<<x<<" "; cout<<"\n"; return 1; } return 0; } void solve(int t_case){ srand(time(NULL)); cin>>n>>k; m = n+k; for(int i=0;i<m;i++) cin>>a[i]; sort(a, a+m); //if(check(7, 4)) { print(4, 7); return; } if(n >= 18000 && k >= 15){ int i = rand()%m; int ri = m-i-1; if(check(a[i] + a[ri])) return; for(int j=1;j<k;j++){ if(check(a[i] + a[ri-j])) return; if(check(a[i] + a[ri+j])) return; } } else { map<int, int> mm; for(int i=0;i<=k;i++){ for(int j=1;j<=k-i+1;j++){ if(mm[a[i] + a[m-j]]) continue; mm[a[i] + a[m-j]] = 1; if(check(a[i] + a[m-j])) return; } } } } signed main(){ NeedForSpeed if(!MULTI) { solve(1); } else { int t; cin>>t; for(int t_case = 1; t_case <= t; t_case++) solve(t_case); } 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...