In this post, we are going to solve Boolean Evaluation DSA Problem from Oracle, Online Assessments conducted on 13th October,2022. Let’s have a look at the problem statement first and then try to solve the problem.

## Boolean Evaluation DSA Problem Statement

You are given 3 integers

$A$,

$B$, and

$C$. You have an expression as

$$\text{((A|X)\&(B|X))=C.}$$

Determine if a number X exists such that the expression holds and if it does then print the minimum value of X else print -1.

The first line contains

$T$, the number of test cases. For each test case the next 3 lines contains one parameter each namely A,B and C respectively where

$(0\le A,B,C\le {10}^{9}).$

Output the minimum value of

$X$ if

$X$ exists else return -1.

2 8 11 9 3 2 1

1 -1

The & (bitwise AND) in C or C++ takes two numbers as operands and does AND on every bit of two numbers. The result of AND is 1 only if both bits are 1.

The | (bitwise OR) in C or C++ takes two numbers as operands and does OR on every bit of two numbers. The result of OR is 1 if any of the two bits is 1.

## Problem Solution in C++

```
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int a,b,c;
cin>>a>>b>>c;
int st = 0,en = INT_MAX;
while(st<=en){
int mid = st+(en-st)/2;
int val = (a|mid)&(b|mid);
// cout<<mid<<" "<<val<<endl;
if(val<c){
st = mid+1;
}else{
en = mid-1;
}
}
int val = (a|st)&(b|st);
if(val==c){
cout<<st<<endl;
}else{
cout<<-1<<endl;
}
}
return 0;
}
```

## Problem Solution in Java

```
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while(t-->0){
boolean flag=false;
int ans=0;
int a=sc.nextInt();
int b=sc.nextInt();
int c=sc.nextInt();
for(int i=0;i<32;i++){
int ba=((a>>i)&1);
int bb=((b>>i)&1);
int bc=((c>>i)&1);
if(bc==0 && ba==1 && bb==1){
System.out.println(-1);
flag=true;
break;
}
else if(bc==1 && (bb==0 || ba==0)){
ans|=(1<<i);
}
}
if(!flag){
System.out.println(ans);
}
}
}
}
```

## Leave a Reply