class Solution {
public:
long long minCost(vector<int>& basket1, vector<int>& basket2) {
vector<int> swapped;
unordered_map<int, int> count;
for (const int b : basket1)
++count[b];
for (const int b : basket2)
--count[b];
for (const auto& [num, freq] : count) {
if (freq % 2 != 0)
return -1;
for (int i = 0; i < abs(freq) / 2; ++i)
swapped.push_back(num);
}
const int minNum = min(ranges::min(basket1), ranges::min(basket2));
const auto midIt = swapped.begin() + swapped.size() / 2;
nth_element(swapped.begin(), midIt, swapped.end());
return accumulate(swapped.begin(), midIt, 0L,
[minNum](long subtotal, int num) {
return subtotal + min(2 * minNum, num);
});
}
};