# Generate original Array from the bitwise AND and Bitwise OR of adjacent elements

Given an integer N denoting the size of an array and two arrays containing Bitwise AND and Bitwise OR of adjacent elements of the array and the first element of the array X, the task is to build the original array.

Examples:

Input: N = 2, X(First element) = 2
Bitwise OR = {3}, Bitwise AND = {2}
Output: {2, 3}

Input: N = 3, X(First element) = 3
Bitwise OR = {4, 3}, Bitwise AND = {3, 4}
Output: {3, 4, 3}

Approach: To solve the problem follow the below idea:

The problem can be solved using this mathematical relation -> A|B = A + B – A&B

Follow the given steps to solve the problem:

• Iterate from i = 1 to N-1 to calculate the remaining array elements.
• Use the formula stated above to generate array values
• Then print all elements

Below is the implementation for the above approach:

## C++

 `// C++ code for the above approach` `#include ``using` `namespace` `std;` `// Function which will calculate the array elements``vector<``int``> solve(``int` `N, ``int` `X, ``int` `OR[], ``int` `AND[])``{``    ``vector<``int``> a(N);``    ``a[0] = X;` `    ``// Loop to calculate the array elements``    ``for` `(``int` `i = 1; i < N; i++) {``        ``a[i] = OR[i - 1] + AND[i - 1] - a[i - 1];``    ``}` `    ``// Return the original array``    ``return` `a;``}` `// Driver code``int` `main()``{``    ``int` `N = 2, X = 2;``    ``int` `OR[] = { 3 };``    ``int` `AND[] = { 2 };` `    ``// Function call``    ``vector<``int``> ans = solve(N, X, OR, AND);``    ``for` `(``int` `i : ans)``        ``cout << i << ``" "``;` `    ``return` `0;``}`

## Java

 `// Java code for the above approach` `import` `java.io.*;` `class` `GFG {` `    ``// Function which will calculate the array elements``    ``static` `int``[] solve(``int` `N, ``int` `X, ``int``[] OR, ``int``[] AND)``    ``{``        ``int``[] a = ``new` `int``[N];``        ``a[``0``] = X;` `        ``// Loop to calculate the array elements``        ``for` `(``int` `i = ``1``; i < N; i++) {``            ``a[i] = OR[i - ``1``] + AND[i - ``1``] - a[i - ``1``];``        ``}` `        ``// return the original array``        ``return` `a;``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `N = ``2``, X = ``2``;``        ``int``[] OR = { ``3` `};``        ``int``[] AND = { ``2` `};` `        ``// Function call``        ``int``[] ans = solve(N, X, OR, AND);``        ``for` `(``int` `i = ``0``; i < ans.length; i++) {``            ``System.out.print(ans[i] + ``" "``);``        ``}``    ``}``}` `// This code is contributed by lokesh (lokeshmvs21).`

## Python3

 `# python3 code for the above approach` `# Function which will calculate the array elements``def` `solve(N, X, OR, AND) :``    ` `    ``a ``=` `[``None``] ``*` `N``    ` `    ``a[``0``] ``=` `X` `    ``# Loop to calculate the array elements``    ``for` `i ``in` `range``(``1``,N) :``        ``a[i] ``=` `OR[i ``-` `1``] ``+` `AND[i ``-` `1``] ``-` `a[i ``-` `1``]` `    ``# Return the original array``    ``return` `a``    ` `  ` `# Driver code``if` `__name__ ``=``=` `"__main__"` `:``    ` `    ``N, X ``=` `2``,``2``    ``OR ``=` `[ ``3` `]``    ``AND ``=` `[ ``2` `]``    ` `    ``# Function call``    ``ans ``=` `solve(N, X, OR, AND)``    ` `    ``for` `i ``in` `ans :``        ``print``(i,end``=``' '``)` `# This code is contributed by adityapatil12`

## C#

 `// C# program for above approach:``using` `System;``class` `GFG {` `  ``// Function which will calculate the array elements``  ``static` `int``[] solve(``int` `N, ``int` `X, ``int``[] OR, ``int``[] AND)``  ``{``    ``int``[] a = ``new` `int``[N];``    ``a[0] = X;` `    ``// Loop to calculate the array elements``    ``for` `(``int` `i = 1; i < N; i++) {``      ``a[i] = OR[i - 1] + AND[i - 1] - a[i - 1];``    ``}` `    ``// return the original array``    ``return` `a;``  ``}` `  ``// Driver Code``  ``public` `static` `void` `Main()``  ``{``    ``int` `N = 2, X = 2;``    ``int``[] OR = { 3 };``    ``int``[] AND = { 2 };` `    ``// Function call``    ``int``[] ans = solve(N, X, OR, AND);``    ``for` `(``int` `i = 0; i < ans.Length; i++) {``      ``Console.Write(ans[i] + ``" "``);``    ``}``  ``}``}` `// This code is contributed by code_hunt.`

## Javascript

 ``

Output
`2 3 `

Time Complexity: O(N)
Auxiliary Space: O(N)

Previous
Next