题意
现在已知 n , m n,m n,m,请求 n n n⊕{ 0 , 1 , . . . . , m 0,1,....,m 0,1,....,m}的 M E X MEX MEX(最小的没有出现过的自然数)
思路
本题转换为
n
⊕
x
=
y
n⊕x=y
n⊕x=y
现在已知
0
<
=
x
<
=
m
0<=x<=m
0<=x<=m,可以将式子转换为
n
⊕
y
=
x
n⊕y=x
n⊕y=x现在已知,
y
y
y没有在我们的运算结果这个集合中出现,那么
x
>
m
x>m
x>m
因此
n
⊕
y
>
=
m
+
1
n⊕y>=m+1
n⊕y>=m+1
回到本式,
n
⊕
x
=
y
n⊕x=y
n⊕x=y,那么
x
x
x的低位和
n
n
n一样这样才能保证在高位不相等的情况下,保证了
n
⊕
x
n⊕x
n⊕x是最小值。
因为我们的
x
x
x要大于
m
m
m因此,我们在移位完毕以后,需要加一,这样保证了我们最后得到的
b
b
bb
bb一定是大于
m
m
m的。
#include<iostream>
using namespace std;
typedef long long ll;
ll n,m;
ll ans=1e18;
void solve(){
ll aa,bb;
for(int i=32;i>=0;i--){
aa=(n>>i)<<i; bb=((m>>i)+1)<<i;
ans=min(ans,aa^bb);
}
}
int main(){
int T;
cin>>T;
while(T--){
ans=1e18;
scanf("%lld %lld",&n,&m);
solve();
cout<<ans<<endl;
}
}