Open In App

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

Last Updated : 25 Nov, 2021
Comments
Improve
Suggest changes
Like Article
Like
Report

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[] = {2, 3, 1, 4, 5}, B[] = {2, 2, 1, 4, 2} 
Output:
All possible pairs are (3, 3), (3, 1), (1, 1) and (5, 5)
Input: A[] = {1, 2, 3, 4, 5}, B[] = {2, 2, 2, 2, 2} 
Output:
 


 


Approach: Iterate through all the possible pairs (i, j) and check the count of set bits in their AND 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 <bits/stdc++.h>
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 AND value is B[j]
            if (__builtin_popcount(A[i] & A[j]) == B[j]) {
                cnt++;
            }

    return cnt;
}

// Driver code
int main()
{
    int A[] = { 2, 3, 1, 4, 5 };
    int B[] = { 2, 2, 1, 4, 2 };
    int size = sizeof(A) / sizeof(A[0]);

    cout << solve(A, B, size);

    return 0;
}
Java
// Java implementation of the approach
public 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 AND 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[] = {2, 3, 1, 4, 5};
        int B[] = {2, 2, 1, 4, 2};
        int size = A.length;

        System.out.println(solve(A, B, size));
    }
}

/* This code contributed by PrinciRaj1992 */
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 AND value is B[j] 
            c = A[i] & A[j]
            if (bin(c).count('1') == B[j]) :
                cnt += 1; 
    return cnt; 

# Driver code 
if __name__ == "__main__" : 

    A = [ 2, 3, 1, 4, 5 ]; 
    B = [ 2, 2, 1, 4, 2 ]; 
    
    size = len(A); 

    print(solve(A, B, size)); 

# This code is contributed 
# by AnkitRai01
C#
// C# Implementation of the above 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 AND value is B[j] 
            { 
                if (countSetBits(A[i] & A[j]) == B[j]) 
                { 
                    cnt++; 
                } 
            } 
        } 

        return cnt; 
    } 
    
    // Function to get no of set 
    // bits in binary representation 
    // of positive integer n 
    static int countSetBits(int n) 
    { 
        int count = 0; 
        while (n > 0)
        { 
            count += n & 1; 
            n >>= 1; 
        } 
        return count; 
    }
    
    // Driver code 
    public static void Main(String[] args) 
    { 
        int []A = {2, 3, 1, 4, 5}; 
        int []B = {2, 2, 1, 4, 2}; 
        int size = A.Length; 

        Console.WriteLine(solve(A, B, size)); 
    } 
} 

// This code is contributed by Princi Singh
JavaScript
<script>

// Javascript Implementation of the above approach 

// Function to return the count of pairs 
// which satisfy the given condition 
function solve(A, B, n) 
{ 
    var cnt = 0; 
    for (var i = 0; i < n; i++) 
    { 
        for (var j = i; j < n; j++) 
        
        // Check if the count of set bits 
        // in the AND value is B[j] 
        { 
            if (countSetBits(A[i] & A[j]) == B[j]) 
            { 
                cnt++; 
            } 
        } 
    } 
    return cnt; 
} 

// Function to get no of set 
// bits in binary representation 
// of positive integer n 
function countSetBits(n) 
{ 
    var count = 0; 
    while (n > 0) 
    { 
        count += n & 1; 
        n >>= 1; 
    } 
    return count; 
} 

// Driver code 
var A = [2, 3, 1, 4, 5]; 
var B = [2, 2, 1, 4, 2];
var size = A.length; 
document.write(solve(A, B, size)); 

// This code is contributed by rutvik_56.
</script>

Output: 
4

 

Time Complexity: O(n2)

Auxiliary Space: O(1)


Next Article
Practice Tags :

Similar Reads