Submission
Status:
---P--P---
Subtask/Task Score:
20/100
Score: 20
User: VggT
Problemset: ประลอง
Language: cpp
Time: 0.002 second
Submitted On: 2025-10-16 11:04:11
#include <bits/stdc++.h>
using namespace std;
void bt(vector<int> player,vector<int> &ans, vector<int> current, int sum, int &sumcurrent, int &mindiff, int size1, int index)
{
if(current.size() == size1)
{
if(mindiff > abs((sum-sumcurrent)-sumcurrent))
{
ans = current;
mindiff = abs((sum-sumcurrent)-sumcurrent);
}
return;
}
for(int i = index; i < player.size(); i++)
{
current.push_back(player[i]);
sumcurrent+=player[i];
bt(player,ans,current,sum,sumcurrent,mindiff,size1,i+1);
current.pop_back();
sumcurrent-=player[i];
}
return;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
int size1 = 0, size2 = 0;
if(n%2 != 0)
{
size1 = (n-1)/2;
size2 = (n+1)/2;
}
else
{
size1 = n/2;
size2 = n/2;
}
vector<int> team1;
vector<int> team2;
vector<int> player(n);
int sum = 0;
for(auto &a : player)
{
cin >> a;
sum+=a;
}
vector<int> ans;
vector<int> current;
int currentsum = 0;
int mindiff = INT_MAX;
int sumcurrent = 0;
bt(player,ans,current,sum,sumcurrent,mindiff,size1,0);
team1 = ans;
unordered_map<int,int> m;
for(auto a : player) m[a]++;
for(auto &a : team1)
{
m[a]--;
if(m[a] == 0) m.erase(a);
}
for(auto l : m)
{
if(l.second > 0)
{
for(int i = 0; i < l.second; i++)
{
team2.push_back(l.first);
}
}
}
reverse(team2.begin(),team2.end());
for(auto a : team1) cout << a << ' ';
cout << '\n';
for(auto a : team2) cout << a << ' ';
return 0;
}