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
从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;
}