Submission
Status:
--P-PPPP-P
Subtask/Task Score:
60/100
Score: 60
User: theem1502
Problemset: ประลอง
Language: c
Time: 0.003 second
Submitted On: 2025-09-24 20:31:05
#include <stdio.h>
#include <stdlib.h>
int absolute(int num) {
if(num >= 0) {
return num;
}
else {
return -1 * num;
}
}
int main() {
int num;
scanf("%d", &num);
int *thearray = malloc(num * sizeof(int));
for (int i = 0; i < num; i++) {
scanf("%d", &thearray[i]);
}
long long sum = 0;
for (int i = 0; i< num; i++) {
sum += thearray[i];
}
int target = sum / 2;
long long power = 1;
for (int i = 0; i < num; i++) {
power *= 2;
}
power--;
int trick = 0;
int targetbit = num / 2;
int leastdifference = 100000;
int *leastarray = malloc(targetbit * sizeof(num));
int *forbit = malloc(num * sizeof(int));
for (long long i = 1; i <= power; i++) {
int anothercount = 0;
int tempnum = i;
int bitcount = 0;
for (int j = 0; j < num; j++) {
int currentbit = tempnum & 1;
forbit[num-j-1] = currentbit;
tempnum = tempnum >> 1;
}
for (int j = 0; j < num; j++) {
if (forbit[j] == 1) { bitcount++;
}
}
if (bitcount != targetbit) {
continue;
}
int currentsum = 0;
for (int j = 0; j < num; j++) {
int currentbit = forbit[j];
if (currentbit == 1) {
currentsum += thearray[j];
}
}
int difference = abs(currentsum - target);
if (difference < leastdifference) {
leastdifference = difference;
for (int j = 0;j< num; j++) {
if (forbit[j] == 1) {
leastarray[anothercount++] = thearray[j];
}
}
}
}
long long min = 10000000000000;
for (int i = 0; i < num; i++) {
if (thearray[i] < min) {
min = thearray[i];
}
}
long long max = -1000000000000;
for (int i = 0; i < num; i++) {
if (thearray[i] > max) {
max = thearray[i];
}
}
int *marked = malloc((max - min + 1) * sizeof(int));
for (int i = 0; i < max-min + 1; i++) {
marked[i] = 0;
}
for (int i = 0; i < targetbit; i++) {
marked[leastarray[i] - min]++;
}
int * anotherarray = malloc(num * sizeof(int));
int wtfcount = 0;
for (int i = 0; i < num; i++) {
if (marked[thearray[i] - min] == 0) {
anotherarray[wtfcount++] = thearray[i];
}
}
for (int i = 0; i < targetbit; i++) {
printf("%d ", leastarray[i]);
}
printf("\n");
for (int i = 0; i < wtfcount; i++) {
printf("%d ", anotherarray[i]);
}
}