Submission

Status:

---P--P---

Subtask/Task Score:

20/100

Score: 20

User: colo39

Problemset: ประลอง

Language: cpp

Time: 0.005 second

Submitted On: 2026-10-03 16:42:41

#include <bits/stdc++.h>
using namespace std;

int small;
int sum;
int a[105];
int dat[105];
int n;
int min_dif = 2e9;
int best_rs[105];
int rs[105];
bool best_chosen[105]; 

void sol(int now, int start_idx) {
    if (now == small + 1) {
        int kuy = 0;
        for (int i = 1; i <= small; i++) {
            rs[i] = dat[a[i]];
            kuy += dat[a[i]];
        }
        if (abs(kuy - (sum - kuy)) < min_dif) {
            min_dif = abs(kuy - (sum - kuy));
            memset(best_rs, 0, sizeof(best_rs));
            memset(best_chosen, false, sizeof(best_chosen));
            
            for (int i = 1; i <= small; i++) {
                best_rs[i] = rs[i];
                best_chosen[a[i]] = true; // Mark index as used in Group 1
            }
        }
        return;
    }

    for (int i = start_idx; i <= n; i++) {
        a[now] = i;
        sol(now + 1, i + 1);
    }
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        int k;
        cin >> k;
        dat[i] = k;
        sum += k;
    }
    
    if (n % 2 == 0) small = n / 2;
    else small = (n - 1) / 2;   

    sol(1, 1);

    for (int i = 1; i <= small; i++) {
        cout << best_rs[i] << " ";
    }
    cout << "\n";

    for (int i = 1; i <= n; i++) {
        if (!best_chosen[i]) {
            cout << dat[i] << " ";
        }
    }
    cout << "\n";

    return 0;
}