ধরুন আমাদের A এর পূর্ণসংখ্যার একটি বিন্যাস রয়েছে। আমাদের সূচকের ত্রিগুণ সংখ্যা (i, j, k) খুঁজে বের করতে হবে যাতে −
A[i] এবং A[j] এবং A[k] হল 0, যেখানে AND bitwise-AND অপারেটরকে প্রতিনিধিত্ব করে।
সুতরাং, যদি ইনপুটটি [3,1,2] এর মত হয়, তাহলে আউটপুট হবে 12
-
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m
সংজ্ঞায়িত করুন -
ret :=0
-
n :=A
এর আকার -
আরম্ভ করার জন্য i :=0, যখন i
-
j শুরু করার জন্য :=0, যখন j
করুন -
j শুরু করার জন্য :=0, যখন j
করুন
-
-
-
আরম্ভ করার জন্য i :=0, যখন i
-
x :=A[i]
-
সমস্ত কী-মানের জোড়ার জন্য a in m
-
যদি (a.key AND x) 0 এর মত হয়, তাহলে −
-
ret :=ret + a.value
-
-
-
-
রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#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