C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++の特定のノードのサブツリー内のすべてのノードのXOR

    この問題では、nツリーが与えられ、ツリーのノードであるクエリがいくつかあります。私たちのタスクは、指定されたノードによって形成されたサブツリーのすべてのノードのXORを出力することです。 問題を理解するために例を見てみましょう クエリ − {1、6、5} 出力 − 0 0 5 説明 − 1^6^3^2^4^7^5 6^2^4 5 この問題を解決するために、ツリーを1回トラバースして保存することにより、サブツリーのすべてのノードのxorを計算します。ここで、子ノードの場合はサブツリーのすべてのノードのxorを計算し、次に指定されたすべてのサブツリーを計算します。結果を保存す

  2. 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