# Triples with Bitwise AND Equal To Zero in C++

C++Server Side ProgrammingProgramming

#### C in Depth: The Complete C Programming Guide for Beginners

45 Lectures 4.5 hours

#### Practical C++: Learn C++ Basics Step by Step

Most Popular

50 Lectures 4.5 hours

#### Master C and Embedded C Programming- Learn as you go

66 Lectures 5.5 hours

Suppose we have an array of integers A. We have to find the number of triples of indices (i, j, k) such that −

• 0 <= i < size of A

• 0 <= j < size of A

• 0 <= k < size of A

A[i] AND A[j] AND A[k] is 0, where AND represents the bitwise-AND operator.

So, if the input is like [3,1,2], then the output will be 12

• To solve this, we will follow these steps −

• Define one map m

• ret := 0

• n := size of A

• for initialize i := 0, when i < n, update (increase i by 1), do −

• for initialize j := 0, when j < n, update (increase j by 1), do −

• for initialize j := 0, when j < n, update (increase j by 1), do −

• for initialize i := 0, when i < n, update (increase i by 1), do −

• x := A[i]

• for all key-value pairs a in m

• if (a.key AND x) is same as 0, then −

• ret := ret + a.value

• return ret

Let us see the following implementation to get better understanding −

## Example

Live Demo

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int countTriplets(vector<int>& A){
unordered_map<int, int> m;
int ret = 0;
int n = A.size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
m[A[i] & A[j]]++;
}
}
for (int i = 0; i < n; i++) {
int x = A[i];
for (auto& a : m) {
if ((a.first & x) == 0) {
ret += a.second;
}
}
}
return ret;
}
};
main(){
Solution ob;
vector<int> v = {3,1,2};
cout << (ob.countTriplets(v));
}

## Input

{3,1,2}

## Output

12