Submission

Status:

---P--P--P

Subtask/Task Score:

30/100

Score: 30

User: LT.

Problemset: ประลอง

Language: cpp

Time: 0.003 second

Submitted On: 2026-02-16 01:42:36

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

int main()
{
    int n;
    cin >> n;
    vector<pair<int, int>> arr(n); // {value, original_index}
    int totalSum = 0;

    for (int i = 0; i < n; i++)
    {
        cin >> arr[i].first;
        arr[i].second = i;
        totalSum += arr[i].first;
    }

    // Sort from high to low by value
    sort(arr.begin(), arr.end(), [](pair<int, int> a, pair<int, int> b)
         { return a.first > b.first; });

    vector<pair<int, int>> answer;
    vector<pair<int, int>> complement;
    int ansSum = 0;
    int compSum = 0;

    // Create working array, excluding middle element if n is odd
    vector<pair<int, int>> working;
    int middleIndex = n / 2;
    pair<int, int> middleValue;
    bool hasMiddle = false;

    for (int i = 0; i < n; i++)
    {
        if (n % 2 == 1 && i == middleIndex)
        {
            middleValue = arr[i];
            hasMiddle = true;
            continue; // Skip middle element
        }
        working.push_back(arr[i]);
    }

    // For every 2 elements, put 1 in answer and 1 in complement by balancing
    for (int i = 0; i < working.size(); i += 2)
    {
        // Decide which goes to answer and which to complement
        if (ansSum <= compSum)
        {
            answer.push_back(working[i]);
            ansSum += working[i].first;
            complement.push_back(working[i + 1]);
            compSum += working[i + 1].first;
        }
        else
        {
            complement.push_back(working[i]);
            compSum += working[i].first;
            answer.push_back(working[i + 1]);
            ansSum += working[i + 1].first;
        }
    }

    // If n is odd, put middle value back
    if (hasMiddle)
    {
        if (ansSum <= compSum)
        {
            answer.push_back(middleValue);
            ansSum += middleValue.first;
        }
        else
        {
            complement.push_back(middleValue);
            compSum += middleValue.first;
        }
    }

    // Sort back to original positions
    sort(answer.begin(), answer.end(), [](pair<int, int> a, pair<int, int> b)
         { return a.second < b.second; });
    sort(complement.begin(), complement.end(), [](pair<int, int> a, pair<int, int> b)
         { return a.second < b.second; });

    // cout << "Answer array: ";
    for (int i = 0; i < answer.size(); i++)
    {
        cout << answer[i].first;
        if (i < answer.size() - 1)
            cout << " ";
    }
    cout << '\n';

    // cout << "Complement array: ";
    for (int i = 0; i < complement.size(); i++)
    {
        cout << complement[i].first;
        if (i < complement.size() - 1)
            cout << " ";
    }
    cout << '\n';

    return 0;
}