Submission

Status:

----------

Subtask/Task Score:

0/100

Score: 0

User: theem1502

Problemset: ประลอง

Language: c

Time: 0.003 second

Submitted On: 2025-09-23 20:38:14

#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]);
}

int sum = 0;
for (int i = 0; i< num; i++) {
    sum += thearray[i];
}
    int target = sum / 2;
    
    
    int 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 (int 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];
                }
            }
        }
        
        




    } 

    int min = 10000000;
    for (int i = 0; i < num; i++) {
        if (thearray[i] < min) {
            min = thearray[i];
        }
    }
    int max = 0;
    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 ", anotherarray[i]);
        
    }
    printf("\n");

    for (int i = 0; i < wtfcount; i++) {
        printf("%d ", leastarray[i]);
    }

}