6.2 VJ A - Dreamoon and Ranking Collection
#include<bits/stdc++.h>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const ll nl=1e5+5;
/*
大概意思是有n个成绩数,在保证它们从小到大连续的条件下补上x个数,求出来补数之后能连起来的数的最大值
开一个数组记录哪些数出现过
从1到100遍历,找出补上x个数之后的位置,再遍历找出后面是否有连续的数,输出连续的数中最大的
如果100之内能补上的数小于x,就要加上少了几个数
刚开始错在忽略了求出的数后面可能不止有一个连续的数
*/
int main()
{
speed_up;
int t;
cin>>t;
while(t--)
{
int n,x;
cin>>n>>x;
int aa,a[101]={0},sum=0;
for(int i=1;i<=n;i++)
{
cin>>aa;
a[aa]=1;
}
int i;
for(i=1;i<=100;i++)
{
if(a[i]==0)sum++;
if(sum==x){
for(int j=i+1;j<=100;j++){
if(a[j]==1)i++;
else break;
}
break;
}
}
if(sum<x)i+=x-sum-1;//当x等于100时
cout<<i<<endl;
}
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const ll nl=1e5+5;
/*
大概意思是有n个成绩数,在保证它们从小到大连续的条件下补上x个数,求出来补数之后能连起来的数的最大值
开一个数组记录哪些数出现过
从1到100遍历,找出补上x个数之后的位置,再遍历找出后面是否有连续的数,输出连续的数中最大的
如果100之内能补上的数小于x,就要加上少了几个数
刚开始错在忽略了求出的数后面可能不止有一个连续的数
*/
int main()
{
speed_up;
int t;
cin>>t;
while(t--)
{
int n,x;
cin>>n>>x;
int aa,a[101]={0},sum=0;
for(int i=1;i<=n;i++)
{
cin>>aa;
a[aa]=1;
}
int i;
for(i=1;i<=100;i++)
{
if(a[i]==0)sum++;
if(sum==x){
for(int j=i+1;j<=100;j++){
if(a[j]==1)i++;
else break;
}
break;
}
}
if(sum<x)i+=x-sum-1;//当x等于100时
cout<<i<<endl;
}
return 0;
}
}