Submission

Status:

P-PP-PP--P

Subtask/Task Score:

60/100

Score: 60

User: ZanTy

Problemset: ประลอง

Language: cpp

Time: 0.004 second

Submitted On: 2026-10-07 12:55:09

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    // เร่งความเร็วการรับส่งข้อมูล I/O
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    if (!(cin >> n)) return 0;

    int arr[30]; // ขนาดรองรับกรณี N ไม่ใหญ่มากสำหรับค่าย 1
    long long total_sum = 0;

    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        total_sum += arr[i];
    }

    int target1 = n / 2; // จำนวนยูนิตที่ฝ่ายที่ 1 ต้องมี
    long long min_diff = -1;
    int best_mask = 0;

    // ใช้ลูปวนเช็คทุกความเป็นไปได้ทั้งหมดด้วย Bitmask (2^n รูปแบบ)
    int total_subsets = (1 << n);
    for (int mask = 0; mask < total_subsets; mask++) {
        int count1 = 0;
        long long sum1 = 0;

        // ตรวจสอบว่าใน mask นี้ มีตำแหน่งไหนถูกเลือกบ้าง
        for (int i = 0; i < n; i++) {
            if ((mask & (1 << i)) != 0) {
                count1++;
                sum1 += arr[i];
            }
        }

        // ถ้าจำนวนยูนิตของฝ่ายที่ 1 ตรงตามโควตาที่กำหนด
        if (count1 == target1) {
            long long sum2 = total_sum - sum1;
            long long diff = abs(sum1 - sum2);

            // หาผลต่างที่น้อยที่สุด
            if (min_diff == -1 || diff < min_diff) {
                min_diff = diff;
                best_mask = mask; // จำรูปแบบการเลือกที่ดีที่สุดไว้
            }
        }
    }

    // แสดงผลสมาชิกฝ่ายที่ 1 ตามลำดับเดิม[cite: 1]
    for (int i = 0; i < n; i++) {
        if ((best_mask & (1 << i)) != 0) {
            cout << arr[i] << " ";
        }
    }
    cout << "\n";

    // แสดงผลสมาชิกฝ่ายที่ 2 ตามลำดับเดิม[cite: 1]
    for (int i = 0; i < n; i++) {
        if ((best_mask & (1 << i)) == 0) {
            cout << arr[i] << " ";
        }
    }
    cout << "\n";

    return 0;
}