मान लीजिए कि हमारे पास पूर्णांक A की एक सरणी है। हमें सूचकांकों (i, j, k) के त्रिगुणों की संख्या इस प्रकार ज्ञात करनी है कि -
A[i] और A[j] और A[k] 0 है, जहां AND बिटवाइज-AND ऑपरेटर का प्रतिनिधित्व करता है।
इसलिए, अगर इनपुट [3,1,2] जैसा है, तो आउटपुट 12
. होगा-
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा परिभाषित करें मी
-
रिट:=0
-
n :=A का आकार
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
इनिशियलाइज़ j :=0 के लिए, जब j
-
-
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
एक्स:=ए[i]
-
सभी कुंजी-मान युग्मों के लिए a in m
-
अगर (a.key और x) 0 के समान है, तो -
-
रिट:=रिट + ए.वैल्यू
-
-
-
-
वापसी रिट
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#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));
} इनपुट
{3,1,2} आउटपुट
12