我是靠谱客的博主 愤怒大雁,最近开发中收集的这篇文章主要介绍子集mex值(冬季每日一题 29),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

给定一组 n n n 个整数的集合 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an(可能存在相同元素)。

请你将该集合分为两个子集 A A A B B B(子集可以为空,也可以包含相同元素)。

要求 m e x ( A ) + m e x ( B ) mex(A)+mex(B) mex(A)+mex(B) 的值尽可能大。

一个集合的 m e x mex mex 值等于集合中不存在的最小非负整数的值,例如:

  • m e x ( 1 , 4 , 0 , 2 , 2 , 1 ) = 3 mex({1,4,0,2,2,1})=3 mex(1,4,0,2,2,1)=3
  • m e x ( 3 , 3 , 2 , 1 , 3 , 0 , 0 ) = 4 mex({3,3,2,1,3,0,0})=4 mex(3,3,2,1,3,0,0)=4
  • m e x ( ∅ ) = 0 mex(∅)=0 mex()=0

如果集合中的任意整数 x x x 均满足 x x x 在该集合中的出现次数等于 x x x A A A 中出现的次数与 x x x B B B 中出现的次数之和,则我们认为该集合被分成了 A A A B B B 两个子集。

输入格式
第一行包含整数 T T T,表示共有 T T T 组测试数据。

每组数据第一行包含整数 n n n

第二行包含 n n n 个整数 a 1 , a 2 , … , a n a_1,a_2,…,a_n a1,a2,,an

输出格式
每组数据输出一行一个结果,表示 mex(A)+mex(B) 的最大值。

数据范围
1 ≤ T ≤ 100 , 1≤T≤100, 1T100,
1 ≤ n ≤ 100 , 1≤n≤100, 1n100,
0 ≤ a i ≤ 100 0≤a_i≤100 0ai100
输入样例:

4
6
0 2 1 5 0 1
3
0 1 2
4
0 2 0 1
6
1 2 3 4 5 6

输出样例:

5
3
4
0

样例解释
在第一个测试用例中, A = 0 , 1 , 2 , B = 0 , 1 , 5 A={0,1,2},B={0,1,5} A=0,1,2,B=0,1,5 是一个可能的选择。

在第二个测试用例中, A = 0 , 1 , 2 , B = ∅ A={0,1,2},B=∅ A=0,1,2,B= 是一个可能的选择。

在第三个测试用例中, A = 0 , 1 , 2 , B = 0 A={0,1,2},B={0} A=0,1,2,B=0 是一个可能的选择。

在第四个测试用例中, A = 1 , 3 , 5 , B = 2 , 4 , 6 A={1,3,5},B={2,4,6} A=1,3,5,B=2,4,6 是一个可能的选择。


#include<iostream>
#include<cstring>

using namespace std;

const int N = 110;

int n;
bool a[N], b[N];

int main(){
    
    
    int t;
    cin >> t;
    int x;
    while(t--){
        
        memset(a, 0, sizeof a);
        memset(b, 0, sizeof b);
        cin >> n;
        for(int i = 0; i < n; i++){
            cin >> x;
            if(a[x]) b[x] = true;
            else a[x] = true;
        }
        
        int sa = 0, sb = 0;
        while(a[sa]) sa++;
        while(b[sb]) sb++;
        cout << sa + sb << endl;
    }
    
    
    return 0;
}

最后

以上就是愤怒大雁为你收集整理的子集mex值(冬季每日一题 29)的全部内容,希望文章能够帮你解决子集mex值(冬季每日一题 29)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部