题解『CF1554 C』

· · 题解

题意

分析

设最终答案为 k,由异或的性质可知:n \oplus k > m

p=m+1,即求最小的 k,使 n\oplus k \ge p

我们一位一位考虑。 令 x_i 表示 x 在二进制下的第 i 位。

则共有四种情况。

代码

#include<bits/stdc++.h>
using namespace std;
int tc,n,p;
long long ans;
inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f;
}
int main()
{
    tc=read();
    while(tc--)
    {
        n=read(),p=read()+1;
        ans=0;
        for(int i=30;i>=0;i--)
        {
            if((n>>i &1)==1&&(p>>i &1)==0)  break;
            if((n>>i &1)==0&&(p>>i &1)==1)  ans|=1<<i;
        }
        printf("%lld\n",ans);   
    }

    return 0;
}