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;
}