Codeforces Round 670 (Div. 2) A. Subset Mex

发布时间 2023-10-14 20:57:51作者: zsxuan

给一个正整数的集合 \(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;
}