题目
题解思路
要满足MEX的a,序列必须要有0-a-1的a个数。
如果从0开始到a-1的^的结果 x 刚好是b,答案就是a。
如果x ^ b == a 即 x ^ a == b 。 异或交换等价。
因为序列中不能存在a,我们必须凑两个大与a的数来抵消来置换出a。
其他情况下,只需凑一个数(必然可以找到)即可得出答案。
有关MEX和XOR的定义要记住
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#include <map>
#include <string>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 300100 ;
int a[N] ;
int main ()
{
ios::sync_with_stdio(false);
for (int i = 1 ; i <= 300000 ; i++ )
a[i] = a[i-1]^i;
int T;
cin>>T;
while(T--)
{
int x,y;
cin>>x>>y;
if ( a[x-1] == y )
cout<<x;
else if ( (a[x-1]^y) == x )
cout<<x+2;
else
cout<<x+1;
cout<<"\n";
}
return 0 ;
}