Codeforces Round #670 (Div. 2) 参与排名人数10765
[codeforces 1406A] Subset Mex 构造Mex(A)尽可能大
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址http://codeforces.com/contest/1406/problem/A
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
A - Subset Mex | GNU C++17 | Accepted | 31 ms | 0 KB |
题目大意:由数组元素构建两个集合A,B,要求Mex(A)+Mex(B)尽可能大,输出这个最大值。
基本思路:构建两次,第一次构建A,让Mex(A)尽可能打,第二次,用剩下的元素构建B.
样例模拟如下:
6
0 2 1 5 0 1
A:0 1 2 Mex(A)=3
B:0 1 5 Mex(B)=2
3
0 1 2
A:0 1 2 Mex(A)=3
B: Mex(B)=0
4
0 2 0 1
A:0 1 2 Mex(A)=3
B:0 Mex(B)=1
6
1 2 3 4 5 6
A: Mex(A)=0
B:1 2 3 4 5 6 Mex(B)=0
AC代码如下:
#include <cstdio>
int num[110];
int main(){
int t,n,i,a,ans;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=0;i<=100;i++)num[i]=0;
for(i=1;i<=n;i++)scanf("%d",&a),num[a]++;
ans=0;
for(i=0;i<=101;i++)//构造A
if(num[i]>=1)num[i]--;
else {ans+=i;break;}
for(i=0;i<=101;i++)//用剩下的元素,构造B
if(num[i]>=1)num[i]--;
else {ans+=i;break;}
printf("%d\n",ans);
}
return 0;
}