Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में एक विशेष एक्सओआर मान वाले सबसेट की संख्या की गणना करें

धनात्मक पूर्णांकों और एक मान मिलान वाली एक सरणी गिरफ्तारी [] को देखते हुए। लक्ष्य एआर के सबसेट को ढूंढना है [] जिसमें ऐसे तत्व होते हैं जिनमें एक्सओआर =मैच होता है।

उदाहरण के लिए

इनपुट

arr[] = {4, 2, 8, 10} match=12

आउटपुट

Count of number of subsets having a particular XOR value are: 2

स्पष्टीकरण

Subsets of arr with XOR of elements as 0 are −
[ 4,8 ], [4,2,10]

इनपुट

arr[] = {3,5,2,7} match=5

आउटपुट

Count of number of subsets having a particular XOR value are− 2

स्पष्टीकरण

ubsets of arr with XOR of elements as 0 are−
[ 5 ], [2,7]

नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -

इस दृष्टिकोण में हम एक गतिशील प्रोग्रामिंग समाधान का उपयोग करेंगे। सरणी arr_2[][] में अनुक्रमणिका i,j पर मान होंगे जैसे कि arr_2[ i ][ j ] में arr[ 0 से i−1 ] के सबसेट से तत्वों का मान XOR है। प्रारंभिक मान arr_2[0][0] को 1 के रूप में लें, क्योंकि एक खाली सेट के लिए XOR 1 है। सेट arr_2[i][j] =arr_2[i−1][j] + arr_2[i−1][j ^ arr[i−1]], अगर सबसेट arr[0 to i−2] में XOR j है तो सबसेट arr[0 to i−1] में भी XOR j है। इसके अलावा अगर सबसेट arr[0 to i−2] में XOR j^arr[i] है तो सबसेट arr[0 to i−1] में XOR j भी j ^ arr[i−1] ^ arr[i−1] है। .परिणाम arr_2[ size ][ match] में मिलेगा।

  • एक पूर्णांक सरणी arr[] लें।

  • चर मिलान को पूर्णांक के रूप में लें।

  • फ़ंक्शन सबसेट_एक्सओआर (इंट एआर [], इंट साइज, इंट मैच) एक इनपुट एरे और उसकी लंबाई लेता है और एक विशेष एक्सओआर मान वाले सबसेट की संख्या की गणना करता है।

  • प्रारंभ में उच्चतम =एआर [0] लें। अब लूप के लिए उपयोग करके पूरे arr[] को पार करें और अधिकतम मान को उच्चतम के रूप में खोजें।

  • गणना अस्थायी =(1 <<(int)(log2(highest) + 1)) - 1 अधिकतम संभव XOR मान के रूप में।

  • XORs स्टोर करने के लिए arr_2[size+1][temp+1] सरणी लें।

  • लूप के लिए 0s का उपयोग करके संपूर्ण arr_2 को प्रारंभ करें।

  • arr_2[0][0] =1 सेट करें।

  • लूप के लिए i=0 से i<=size, और j=0 से j<=size तक का उपयोग करना, temp_2 =arr_2[i−1][j ^ arr[i−1]] सेट करें और arr_2[i][j सेट करें ] =arr_2[i−1][j] + temp_2.

  • लूप के लिए दोनों के अंत में हमारे पास एक विशेष XOR मान वाले सबसेट की संख्या के रूप में arr_2[size][match] होगा।

  • परिणाम के रूप में arr_2 [आकार] [मिलान] लौटाएं।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
int subset_XOR(int arr[], int size, int match){
   int highest = arr[0];
   for (int i = 1; i < size; i++){
      if(arr[i] > highest){
         highest = arr[i];
      }
   }
   int temp = (1 << (int)(log2(highest) + 1) ) − 1;
   if( match > temp){
      return 0;
   }
   int arr_2[size+1][temp+1];
   for (int i = 0; i<= size; i++){
      for (int j = 0; j<= temp; j++){
         arr_2[i][j] = 0;
      }
   }
   arr_2[0][0] = 1;
   for (int i=1; i<=size; i++){
      for (int j=0; j<=temp; j++){
         int temp_2 = arr_2[i−1][j ^ arr[i−1]];
         arr_2[i][j] = arr_2[i−1][j] + temp_2;
      }
   }
   return arr_2[size][match];
}
int main(){
   int arr[] = {4, 2, 8, 10, 3, 4, 4};
   int match = 2;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of subsets having a particular XOR value are: "<<subset_XOR(arr, size, match);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of number of subsets having a particular XOR value are − 8

  1. सी ++ में जंगल में पेड़ों की संख्या गिनें

    जंगल के शीर्षों को देखते हुए (पेड़ों का संग्रह)। लक्ष्य उस जंगल में पेड़ों की संख्या ज्ञात करना है। हम जंगल पर DFS (गहराई से पहली खोज) एल्गोरिथम चलाकर ऐसा करेंगे। उदाहरण के लिए इनपुट edges = { { 1,3 }, {2,8}, {2,6}, {3,5}, {3,7}, {4,8} } आउटपुट Count of number of trees in a forest are: 3 स्पष्टीकर

  1. सी ++ में एक विशेष एक्सओआर मान वाले सबसेट की संख्या की गणना करें

    धनात्मक पूर्णांकों और एक मान मिलान वाली एक सरणी गिरफ्तारी [] को देखते हुए। लक्ष्य एआर के सबसेट को ढूंढना है [] जिसमें ऐसे तत्व होते हैं जिनमें एक्सओआर =मैच होता है। उदाहरण के लिए इनपुट arr[] = {4, 2, 8, 10} match=12 आउटपुट Count of number of subsets having a particular XOR value are: 2 स्पष्टीकरण

  1. C++ में एक सेट को k सबसेट में विभाजित करने के तरीकों की संख्या की गणना करें

    दो अंक e और p दिए गए हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p विभाजन/सबसेट में विभाजित कर सकते हैं। उदाहरण के लिए इनपुट e=4 p=2 आउटपुट Count of number of ways to partition a set into k subsets are: 7 स्पष्टीकरण If elements are: a b c d then ways to divide them into