Submission

Status:
---P--P---

Score: 20

User: fluke

Problemset: ประลอง

Language: cpp

Time: 0.003 second

Submitted On: 2025-03-12 20:48:51

#include <bits/stdc++.h>
#define ll long long
#define f first 
#define s second 
#define pii pair<int,int> 
#define emb emplace_back
#define em emplace
#define all(x) x.begin(),x.end()
#define DB cout<<"\n";system("pause");
using namespace std;

int n;
int per1,per2;
int best = 1e9+7;
vector <int> member1 , member2;
vector <int> power(101),qsum(101);

void dfs(int sum1,int sum2,int team1,int team2,vector <int> &team){

    // cout<<sum1<<" "<<sum2<<"\n";
    // cout<<team1<<" "<<team2<<"\n";
    // for(auto x : team)cout<<x<<" ";
    // DB

    if(team1 != per1 && team2 != per2){
        team[team1+team2] = 1;
        dfs(sum1+power[team1+team2],sum2,team1+1,team2,team);

        team[team1+team2] = 2;
        dfs(sum1,sum2+power[team1+team2],team1,team2+1,team);

        team[team1+team2] = 0;
    }
    else {
        if(team1 == per1){
            
            sum2 += qsum[n] - qsum[team1 + team2];
            
            if(abs(sum1 - sum2) < best){
                member1.clear();
                member2.clear();
                best = abs(sum1 - sum2);
                for(int i=0;i<n;i++){
                    if(team[i] == 1)member1.emb(power[i]);
                    else member2.emb(power[i]);
                }
            }


        }
        else {
            
            sum1 += qsum[n] - qsum[team1 + team2];

            if(abs(sum1 - sum2) < best){
                best = abs(sum1 - sum2);
                member1.clear();
                member2.clear();
                for(int i=0;i<n;i++){
                    if(team[i] == 2)member2.emb(power[i]);
                    else member1.emb(power[i]);
                }
            }

        }

    }
}

int main(){
ios::sync_with_stdio(false);cin.tie(0);
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>power[i];
        qsum[i+1] = qsum[i] +power[i];
    }

    if(n%2 == 0){
        per1 = n/2;
        per2 = n/2;
    }
    else {
        per1 = (n-1)/2;
        per2 = (n+1)/2;
    }
    vector <int> team(n);
    dfs(0,0,0,0,team);

    // cout<<best;
    // cout<<"\n";
    int sum1  = 0 ,sum2 = 0;
    for(int x  : member1){
        cout<<x<<" ";
        // sum1 += x;
    }
    // cout<<sum1;
    cout<<"\n";
    for(int x  : member2){
        cout<<x<<" ";
        // sum2 += x;
    }
    // cout<<sum2;
}