C++でビット単位でゼロに等しいトリプル
整数Aの配列があるとします。-
となるようなインデックス(i、j、k)のトリプルの数を見つける必要があります。A [i] AND A [j] AND A [k]は0です。ここで、ANDはビット単位のAND演算子を表します。
したがって、入力が[3,1,2]の場合、出力は12
になります。-
これを解決するには、次の手順に従います-
-
1つのマップを定義するm
-
ret:=0
-
n:=Aのサイズ
-
初期化i:=0の場合、i
-
初期化j:=0の場合、j
-
初期化j:=0の場合、j
-
-
-
初期化i:=0の場合、i
-
x:=A [i]
-
m内のすべてのキーと値のペアa
-
(a.key AND x)が0と同じ場合、-
-
ret:=ret + a.value
-
-
-
-
retを返す
理解を深めるために、次の実装を見てみましょう-
例
#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
-
N以下で、C++の合計がSである最小数
問題の説明 1からNまでのN個の数とS個の数が与えられます。タスクは、合計してSを与える最小数の数を出力することです 例 n=7およびs=10の場合、最低2つの数字が必要です (9, 1) (8, 2) (7, 3) (6, 4) アルゴリズム Answer can be calculated using below formula (S/N) + 1 if { S %N > 0} 例 #include <bits/stdc++.h> using namespace std; int getMinNumbers(int n, int s) { r
-
C ++のビットごとのANDとは何ですか?
ビットごとのAND演算子(&)は、第1オペランドの各ビットを第2オペランドの対応するビットと比較します。両方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0に設定されます。ビット単位の包括的AND演算子の両方のオペランドは、整数型である必要があります。たとえば、 例 #include <iostream> using namespace std; int main() { unsigned short a = 0x5555;