链接:https://codeforces.com/contest/1554/problem/C
题意:给出n和m,要求找到最小的大于等于0的不在n ^ 0 ~ n ^ m覆盖范围内的数。
题解:
对于 a ^ b == c 有 a ^ c == b。
寻找一个最小k, 对于 n ^ x == k, x ∉(1, m), 又有 n ^ 0 == n.。 可得 x > m
该问题等效于 对于 n ^ k == x, x > m, 即 n ^ k > m, 寻找最小k。
可令 p == m + 1, 即 n ^ k >= p;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
ll n,m;
bool flag=1;
ll ans=0;
cin>>n>>m;
m++;
for(int i=30;i>=0;i--){
if(flag&&((m>>i)&1)==1&&((n>>i)&1)==0){
ans|=(1<<i);
}
if(((m>>i)&1)==0&&((n>>i)&1)==1){
flag=0;
}
}
cout<<ans<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
//system("pause");
return 0;
}