3705. 子集mex值【模拟】

3705. 子集mex值

3705. 子集mex值【模拟】_第1张图片
输入样例:

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

3705. 子集mex值【模拟】_第2张图片

从0开始的每个数x,大于等于2就没事,一旦不存在x,那么res为x*2
如果只有一个x,其中一个集合的mex是x
很显然,数据x不会超过100,那么数据范围已经暗示你用cnt数组记录每个数出现的次数,记录的好处不止在于不用遍历来计算某个数重复出现了多少次,还可以直接从0开始,按顺序得到每个数出现的次数,而不是排序之后傻傻模拟

#include 
using namespace std;
#define int long long int
int n,m,k,x,T,p,y;
const int N=105;
int cnt[N];
signed main(){
     cin>>T;
     while(T--){
    // 从0开始的每个数x,大于等于2就没事,一旦不存在x,那么res为x*2
    // 如果只有一个x,其中一个是x
        cin>>n;
        memset(cnt,0,sizeof(cnt));
        for(int i=0;i<n;i++){
            cin>>x;
            cnt[x]++;//记录每个数出现的次数
        }
        int res=-1;
        for(int i=0;i<=100;i++){
            if(cnt[i]==0){
                if(res==-1){
                    cout<<i*2<<endl;
                    break;
                }
                else {
                    cout<<res+i<<endl;
                    break;
                }
            }
            else if(cnt[i]==1){
                if(res==-1)res=i;
                // else{
                //     cout<
                //     break;
                // }
            }
            else continue;
            // cout<<"hhh "<
        }

     }
    return 0;
}



以下,糊涂啊!!!

#include 
using namespace std;
#define int long long int
int n,m,k,x,T,p,y;
const int N=105;
int a[N];
signed main(){
     cin>>T;
     while(T--){
    // 从0开始的每个数x,大于等于2就没事,一旦不存在x,那么res为x*2
    // 如果只有一个x,其中一个是x
        cin>>n;
        for(int i=0;i<n;i++)cin>>a[i];
        sort(a,a+n);
        int num=0;
        int res=-1;
        for(int i=0;i<n;i++){
            
            if(a[i]!=num){
                cout<<"hhh1 "<<endl;
                if(res==-1) cout<<num*2<<endl;
                else cout<<res+num<<endl;
                break;
            }
            else if(i+1<n){
                
                // num++;
                if(a[i+1]==a[i]){
                    
                    while(a[i+1]==a[i]){
                        i++;
                    }
                    // i++;
                }
                else{
                    if(res==-1)res=a[i];
                    else{
                        cout<<res+a[i]<<endl;
                        break;
                    }
                }
                cout<<"hhh2 "<<res<<" "<<num<<" "<<i<< endl;
            }
          num++;
        }
        
        
     }
    return 0;
}



你可能感兴趣的:(贪心,思维,构造,算法,c++,图论)