给一个正整数的集合 \(S\) ,需要将他分成两个非空子集 \(A\) 和 \(B\) 满足 \(S = A + B, A \cap B = \varnothing\) 。你需要使 \(mex(A) + mex(B)\) 最大,询问这个最大值。
若 \(mex(A) + mex(B)\) 最大,则 \(mex(A)\) 和 \(mex(B)\) 分别最大不会产生坏的影响。不妨让 \(mex(A) \geq mex(B)\) 。
view
#include <bits/stdc++.h>
typedef long long ll;
void solve(){
int n; std::cin >> n;
std::map<int, int> mp;
for (int i = 1, x; i <= n; i++) std::cin >> x, mp[x] += 1;
int L1 = 0;
while (mp[L1] > 0) mp[L1] -= 1, L1 += 1;
int L2 = 0;
while (mp[L2] > 0) mp[L2] -= 1, L2 += 1;
std::cout << L1 + L2 << '\n';
}
int main() {
int _ = 1; std::cin >> _;
while (_--) {solve();}
return 0;
}