Subset Mex
- 题意
给你一个长度为
n
n
n的数组
a
a
a,你需要将其分成两个数组,使得其中未出现的最小非负整数的和最大 - 思路
首先第一个数必然是在数组¥a
中
就
未
出
现
的
最
下
非
负
整
数
,
这
将
使
得
在
该
数
之
前
的
所
有
数
减
¥
1
中就未出现的最下非负整数,这将使得在该数之前的所有数减¥1
中就未出现的最下非负整数,这将使得在该数之前的所有数减¥1,然后再从
0
0
0到
m
a
x
max
max走一遍找到缺少的值即可 - 代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
int a[maxn];
int vis[maxn];
void solve() {
int n;
scanf("%d", &n);
int mx = 0;
for (int i=0;i<=110;i++) vis[i]=0;
for (int i = 1, x; i <= n; i++) {
scanf("%d", &x);
vis[x]++;
mx = max(mx, x);
}
int ans = 0;
for (int i = 0; i <= mx + 1; i++) {
if (vis[i] == 0) {
ans += i;
break;
}
}
for (int i = 0; i <= mx + 1; i++) {
if (vis[i] <= 1) {
ans += i;
break;
}
}
printf("%d\n", ans);
}
signed main() {
int _;
scanf("%d", &_);
while (_--) {
solve();
}
return 0;
}