C++のすべてのサブアレイXORのXOR
この問題では、n個の要素の配列が与えられます。私たちのタスクは、XORのXORを、配列の要素から作成されたすべての可能なサブ配列(順番に取得)を出力することです。
問題を理解するために例を見てみましょう
入力 −配列={1、3、6、8}
出力 − 0
説明 −
(1) ^ (3) ^ (6) ^ (8) ^ (1^3) ^ (3^6)^ (6^8) ^ (1^3^6) ^ (3^6^8) ^ (1^3^6^8)
この問題を解決するための簡単な解決策は、すべてのサブアレイを反復処理してxorsを見つけることです。しかし、これは非効率的なアプローチです。より良いアプローチは、すべてのサブ配列で発生した配列の各要素の頻度をカウントし、要素のxor −xorのプロパティを偶数回使用することです。 。これを使用して、サブ配列リストで偶数回出現するすべての値を無視します。これで、出現頻度が奇数の要素が考慮されます。つまり、出現頻度が奇数の要素のxorが最終結果になります。
サブ配列内の配列の各要素の出現を見つけるために、この式を使用します(i + 1)*(n-i) 。
この式を使用して、各要素の出現頻度を見つけ、次に、奇数の頻度を持つ要素を検討し、xまたはそれから最終結果を取得します。
例
ソリューションの実装を示すプログラム
#include <iostream> using namespace std; int xorSubarrayXors(int arr[], int N){ int result = 0; for (int i = 0; i < N; i++){ int freqency = (i + 1) * (N - i); if (freqency % 2 == 1) result ^= arr[i]; } return result; } int main() { int arr[] = {1, 3, 6, 8}; int N = sizeof(arr) / sizeof(arr[0]); cout<<"The xor of all subarray xors is : "<<xorSubarrayXors(arr, N); return 0; }
出力
The xor of all subarray xors is : 0
-
C++の特定のノードのサブツリー内のすべてのノードのXOR
この問題では、nツリーが与えられ、ツリーのノードであるクエリがいくつかあります。私たちのタスクは、指定されたノードによって形成されたサブツリーのすべてのノードのXORを出力することです。 問題を理解するために例を見てみましょう クエリ − {1、6、5} 出力 − 0 0 5 説明 − 1^6^3^2^4^7^5 6^2^4 5 この問題を解決するために、ツリーを1回トラバースして保存することにより、サブツリーのすべてのノードのxorを計算します。ここで、子ノードの場合はサブツリーのすべてのノードのxorを計算し、次に指定されたすべてのサブツリーを計算します。結果を保存す
-
C++で要素のすべての組み合わせを出力します
この問題では、番号nが与えられます。私たちの仕事は、nの因数のすべての組み合わせを印刷することです。 トピックをよりよく理解するために例を見てみましょう- Input: 24 Output: 2 2 2 3 2 4 3 8 3 4 6 2 12 このために、数の要素の組み合わせを見つける再帰関数を使用します。そして、すべての組み合わせを配列の配列に格納します。 例 このコードは、ソリューションの実装を示しています。 #include<bits/stdc++.h> using namespace std; vector<vector<int>> fact