题意: 给你n个数,Alice和Bob轮流进行k次操作,每次操作可以添加任意一个数到数组中,如果k轮之后,不属于这个数组的最小自然数是偶数Alice胜,否则Bob胜
思路:直接访问前2*k个未访问的数,如果偶数的数量比奇数多,剩余的肯定是偶数,Alice胜,否则相反 ,如果前2*k相同,判断第2*k+1个数的奇偶性.
#include<bits/stdc++.h>
using namespace std;
bool a[1000005];//int会超时
int main(){
int T;
scanf("%d",&T);
while(T--){
int n,k;
memset(a,0,sizeof(a));
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
int m;
scanf("%d",&m);
a[m]=1;//记录
}
int ans=0;
int o=0,e=0;//o偶数的的数量,e奇数的数量
int h=0;//判断2*k+1个数的奇偶
for(int i=0;i<1000005;i++){
if(!a[i]){
ans++;
if(ans==2*k+1){
if(i%2==0){
h=1;
}
else h=0;
break;
}
if(i%2==0){
o++;
}
else e++;
// if(o>k||e>k)break;
}
}
int tmp;
if(o>e){
tmp=1;
}
else if(o<e){
tmp=0;
}
else{
tmp=h;
}
if(tmp){
printf("Alice\n");
}
else {
printf("Bob\n");
}
}
}