Problem Description
Claris loves bitwise operations very much, especially XOR, because it has many beautiful features. He gets four positive integers
a,b,c,d
that satisfies
a≤b
and
c≤d
. He wants to choose two integers
x,y
that satisfies
a≤x≤b
and
c≤y≤d
, and maximize the value of
x XOR y
. But he doesn't know how to do it, so please tell him the maximum value of
x XOR y
.
Input
The first line contains an integer
T(1≤T≤10,000)
——The number of the test cases.
For each test case, the only line contains four integers a,b,c,d(1≤a,b,c,d≤1018) . Between each two adjacent integers there is a white space separated.
For each test case, the only line contains four integers a,b,c,d(1≤a,b,c,d≤1018) . Between each two adjacent integers there is a white space separated.
Output
For each test case, the only line contains a integer that is the maximum value of
x XOR y
.
Sample Input
2 1 2 3 4 5 7 13 15
Sample Output
6 11HintIn the first test case, when and only when $x=2,y=4$, the value of $x~XOR~y$ is the maximum. In the second test case, when and only when $x=5,y=14$ or $x=6,y=13$, the value of $x~XOR~y$ is the maximum.
#include<cstdio>
using namespace std;
int main()
{
int T;
long long a,b,c,d,x,y,t;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
t=1;
t=t<<62;
for(x=0,y=0;t>=1;t=t/2)
{
if(d>=y+t&&a<x+t)
y+=t;
else if(b>=x+t&&c<y+t)
x+=t;
else if(c>=y+t&&a>=x+t)
{
x+=t;
y+=t;
}
}
printf("%lld\n",x^y);
}
return 0;
}