Submission #525085

#TimeUsernameProblemLanguageResultExecution timeMemory
525085dron_rpTable Tennis (info1cup20_tabletennis)C++14
11 / 100
3081 ms8440 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

ll n, k;
vector<ll> a, ans;
/*

map<pair<ll, ll>, bool> dp;


bool check(ll sum, ll items, ll W, vector<bool>&visited){
    if (sum == W/2 && items == n/2){
        return true;;
    }
    if (dp.count({sum, items})) return dp[{sum, items}];
    dp[{sum, items}] = false;

}
*/



bool good(vector<ll>v){
    sort(v.begin(), v.end());
    ll sum1 = 0, sum2 = 0;
    for (int i = 0; i<n/2; i+=2){
        sum1 += a[i]+a[n-1-i];
        sum2 += a[i+1]+a[n-2-i];
    }
    return sum1 == sum2;
}

vector<ll> transform(vector<bool>&visited){
    vector<ll> v(n);
    int idx = 0;
    for (int i = 0; i<n+k; i++){
        if (visited[i]){
            //cout << i << "\n";
            v[idx++] = a[i];
        }
    }
    return v;
}

void solve(vector<bool>&visited, int cnt){
    if (cnt == k-1){
        vector<ll> b = transform(visited);
        if (good(b)){
            ans = b;
        }
        return;
    }
    for (int i = 0; i<n+k; i++){
        if (visited[i]){
            visited[i] = false;
            solve(visited, cnt+1);
            visited[i] = true;
        }
    }
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
   
    


    cin >> n >> k;
    //cerr << n << " " << k << "\n";
    a.resize(n+k);
    for (auto& i : a) cin >> i;
    /*
    vector<ll> v = a;
    vector<bool> visited(n+k, true);
    solve(visited, 0);
    for (auto& i : ans) cout << i << " ";
    */
    
    //vector<bool> visited(n+k, true);
    if ((n/2)%2 == 0){
        for (int i = 0; i<n+k; i++){
            int l = 0, r = n+k-1;
            ll sum1 = 0, sum2 = 0;
            bool turno = true;
            set<ll> res;
            while (l<r){
                if (l == i) l++;
                if (r == i) r--;
                if (turno){
                    sum1 += a[l]+a[r];
                    turno = false;
                }
                else{
                    sum2 += a[l]+a[r];
                    turno = true;
                }
                res.insert(a[l]);
                res.insert(a[r]);
                l++; r--;
            }
            if (sum1 == sum2){
                for (auto& c : res){
                    cout << c << " ";
                }
                cout << "\n";
                return 0;
            }
        }
    } else{
        for (int i = 0; i<n+k; i++){
            int l = 0, r = n+k-1;
            ll sum1 = 0, sum2 = 0;
            bool turno = true;
            set<ll> res;
            pair<ll, ll> last = {0, 0};
            //cout <<i << "\n";
            while (l<r){
                if (l == i) l++;
                if (r == i) r--;
                //cout << l << " " << r << "\n";
                if (turno){
                    sum1 += a[l]+a[r];
                    turno = false;
                }
                else{
                    sum2 += a[l]+a[r];
                    turno = true;
                }
                res.insert(a[l]);
                res.insert(a[r]);
                last = {a[l], a[r]};
                l++; r--;
            }
            //cerr << i << " ";
            
            sum1 -= last.second;
            sum2 += last.second;
            //cerr << sum1 << " " << sum2 << "\n";
            
            if (sum1 == sum2){
                for (auto& c : res){
                    cout << c << " ";
                }
                cout << "\n";
                return 0;
                //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...