# Count pairs of elements such that number of set bits in their OR is B[i]

• Difficulty Level : Medium
• Last Updated : 15 Feb, 2022

Given two arrays A[] and B[] of N elements each. The task is to find the number of index pairs (i, j) such that i ≤ j and F(A[i] | A[j]) = B[j] where F(X) is the count of set bits in the binary representation of X.
Examples

Input: A[] = {5, 3, 2, 4, 6, 1}, B[] = {2, 2, 1, 4, 2, 3}
Output:
All possible pairs are (5, 5), (3, 3), (2, 2),
(2, 6), (4, 6), (6, 6) and (6, 1).
Input: A[] = {4, 3, 5, 6, 7}, B[] = {1, 3, 2, 4, 5}
Output:

Approach: Iterate through all the possible pairs (i, j) and check the count of set bits in their OR value. If the count is equal to B[j] then increment the count.
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to return the count of pairs` `// which satisfy the given condition` `int` `solve(``int` `A[], ``int` `B[], ``int` `n)` `{` `    ``int` `cnt = 0;`   `    ``for` `(``int` `i = 0; i < n; i++)` `        ``for` `(``int` `j = i; j < n; j++)`   `            ``// Check if the count of set bits` `            ``// in the OR value is B[j]` `            ``if` `(__builtin_popcount(A[i] | A[j]) == B[j]) {` `                ``cnt++;` `            ``}`   `    ``return` `cnt;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `A[] = { 5, 3, 2, 4, 6, 1 };` `    ``int` `B[] = { 2, 2, 1, 4, 2, 3 };` `    ``int` `size = ``sizeof``(A) / ``sizeof``(A);`   `    ``cout << solve(A, B, size);`   `    ``return` `0;` `}`

## Java

 `// Java implementation of the approach` `class` `GFG ` `{`   `// Function to return the count of pairs` `// which satisfy the given condition` `static` `int` `solve(``int` `A[], ``int` `B[], ``int` `n)` `{` `    ``int` `cnt = ``0``;`   `    ``for` `(``int` `i = ``0``; i < n; i++)` `        ``for` `(``int` `j = i; j < n; j++)`   `            ``// Check if the count of set bits` `            ``// in the OR value is B[j]` `            ``if` `(Integer.bitCount(A[i] | A[j]) == B[j])` `            ``{` `                ``cnt++;` `            ``}`   `    ``return` `cnt;` `}`   `// Driver code` `public` `static` `void` `main(String args[])` `{` `    ``int` `A[] = { ``5``, ``3``, ``2``, ``4``, ``6``, ``1` `};` `    ``int` `B[] = { ``2``, ``2``, ``1``, ``4``, ``2``, ``3` `};` `    ``int` `size = A.length;`   `    ``System.out.println(solve(A, B, size));` `}` `}`   `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 implementation of the approach `   `# Function to return the count of pairs ` `# which satisfy the given condition ` `def` `solve(A, B, n) : `   `    ``cnt ``=` `0``; ` `    ``for` `i ``in` `range``(n) :` `        ``for` `j ``in` `range``(i, n) : `   `            ``# Check if the count of set bits ` `            ``# in the OR value is B[j] ` `            ``if` `(``bin``(A[i] | A[j]).count(``'1'``) ``=``=` `B[j]) :` `                ``cnt ``+``=` `1``; ` `            `  `    ``return` `cnt `     `# Driver code ` `if` `__name__ ``=``=` `"__main__"` `: `   `    ``A ``=` `[ ``5``, ``3``, ``2``, ``4``, ``6``, ``1` `]; ` `    ``B ``=` `[ ``2``, ``2``, ``1``, ``4``, ``2``, ``3` `]; ` `    ``size ``=` `len``(A); `   `    ``print``(solve(A, B, size)); `   `# This code is contributed by AnkitRai01`

## C#

 `// C# implementation of the approach ` `using` `System;`   `class` `GFG ` `{`   `// Function to return the count of pairs` `// which satisfy the given condition` `static` `int` `solve(``int` `[]A, ``int` `[]B, ``int` `n)` `{` `    ``int` `cnt = 0;`   `    ``for` `(``int` `i = 0; i < n; i++)` `        ``for` `(``int` `j = i; j < n; j++)`   `            ``// Check if the count of set bits` `            ``// in the OR value is B[j]` `            ``if` `(bitCount(A[i] | A[j]) == B[j])` `            ``{` `                ``cnt++;` `            ``}`   `    ``return` `cnt;` `}`   `static` `int` `bitCount(``long` `x)` `{` `    ``// To store the count` `    ``// of set bits` `    ``int` `setBits = 0;` `    ``while` `(x != 0)` `    ``{` `        ``x = x & (x - 1);` `        ``setBits++;` `    ``}` `    ``return` `setBits;` `}`   `// Driver code` `public` `static` `void` `Main(String []args)` `{` `    ``int` `[]A = { 5, 3, 2, 4, 6, 1 };` `    ``int` `[]B = { 2, 2, 1, 4, 2, 3 };` `    ``int` `size = A.Length;`   `    ``Console.WriteLine(solve(A, B, size));` `}` `}`   `/* This code is contributed by PrinciRaj1992 */`

## Javascript

 ``

Output:

`7`

Time Complexity: O(N2)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :