给定两个数组,每个数组分别包含N个元素的A []和B [] 。任务是找到索引对(i,j)的数量,以使i≤j且F(A [i]&A [j])= B [j] ,其中F(X)是其中的设置位数X的二进制表示形式。
例子:
Input: A[] = {2, 3, 1, 4, 5}, B[] = {2, 2, 1, 4, 2}
Output: 4
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: 2
方法:遍历所有可能的对(i,j),并检查其AND值中设置位的计数。如果计数等于B [j],则增加计数。
下面是上述方法的实现:
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 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
输出:
4