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

सी ++ में एक सबएरे का एक्सओआर

इस समस्या में, हमें एक गिरफ्तारी [] और कुछ प्रश्न दिए गए हैं जो सरणी में एल से आर के बीच हैं। हमारा काम एल से आर के बीच सबएरे के एक्सओआर को प्रिंट करना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - सरणी ={1, 4, 5, 7, 2, 9} एल =1, आर =5

आउटपुट -

स्पष्टीकरण − 4^5^7^2^9

  • इस समस्या को हल करने के लिए, हम निम्नलिखित अवलोकन के आधार पर एक सरणी बनाएंगे,

  • हम XOR कई बिट्स करेंगे, यदि 1s की विषम संख्या है, तो परिणाम 1 होगा अन्यथा परिणाम 0 होगा।

अब, हम एक द्वि-आयामी ऐरे काउंट बनाएंगे जो 1s की गिनती को स्टोर करेगा। मान गणना [i] [j] स्थिति i-j के लिए 1s की संख्या की संख्या है जो कि 1 की संख्या है जो बिट की ith स्थिति में सबअरे गिरफ्तारी [0..j] में मौजूद हैं। उप-सरणी गिरफ्तारी [L..R] के सभी बिट्स के लिए 1s की संख्या गिनती सरणी का उपयोग करके पाई जाती है। गिरफ्तार करने का सूत्र [एल ... आर] =गिनती [i] [आर] - गिनती [i] [एल -1]। यदि 1s की संख्या विषम है, तो ith बिट परिणाम में सेट होता है। अंतिम परिणाम ith बिट के अनुरूप 2 की शक्ति को जोड़कर प्राप्त किया जा सकता है, बशर्ते कि यह बिट सेट हो।

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void preProcessArray(int arr[], int n, vector<vector<int> >& cnt) {
   int i, j;
   for (i = 0; i < 32; i++) {
      cnt[i][0] = 0;
      for (j = 0; j < n; j++) {
         if (j > 0) {
            cnt[i][j] = cnt[i][j - 1];
         }
         if (arr[j] & (1 << i))
         cnt[i][j]++;
      }
   }
}
int findXORofSubArray(int L, int R, const vector<vector<int> > count) {
   int result = 0;
   int noOfOnes;
   int i, j;
   for (i = 0; i < 32; i++) {
      noOfOnes = count[i][R] - ((L > 0) ? count[i][L - 1] : 0);
      if (noOfOnes & 1) {
         result+=(1 << i);
      }
   }
   return result;
}
int main(){
   int arr[] = { 1, 4, 5, 7, 2, 9 };
   int n = sizeof(arr) / sizeof(arr[0]);
   vector<vector<int> > count(32, vector<int>(n));
   preProcessArray(arr, n, count);
   int L = 1;
   int R = 5;
   cout<<"The XOR of SubArray: "<<findXORofSubArray(L, R, count);
   return 0;
}

आउटपुट

The XOR of SubArray: 13

  1. सी ++ में एक सबरे को फ़्लिप करके 0 की संख्या को अधिकतम करें

    समस्या कथन एक बाइनरी सरणी को देखते हुए, एक सरणी में शून्य की अधिकतम संख्या ज्ञात करें जिसमें एक सबरे के एक फ्लिप की अनुमति है। एक फ्लिप ऑपरेशन सभी 0s से 1s और 1s से 0s तक स्विच करता है अगर arr1={1, 1, 0, 0, 0, 0, 0} यदि हम पहले 2 1 से 0 तक पलटते हैं, तो हम आकार 7 की उप-सरणी इस प्रकार प्राप्त कर स

  1. C++ में न्यूनतम XOR मान युग्म

    समस्या कथन पूर्णांकों की एक सरणी को देखते हुए। जोड़ी को एक सरणी में खोजें जिसमें न्यूनतम XOR मान हो उदाहरण If arr[] = {10, 20, 30, 40} then minimum value pair will be 20 and 30 as (20 ^ 30) = 10. (10 ^ 20) = 30 (10 ^ 30) = 20 (10 ^ 40) = 34 (20 ^ 30) = 10 (20 ^ 40) = 60 (30 ^ 40) = 54 एल्गोरिदम दि

  1. सी ++ में static_cast

    static_cast का उपयोग सामान्य/साधारण प्रकार के रूपांतरण के लिए किया जाता है। यह निहित प्रकार के जबरदस्ती के लिए जिम्मेदार कलाकार भी है और इसे स्पष्ट रूप से भी कहा जा सकता है। आपको इसका उपयोग फ्लोट को इंट, चार से इंट आदि में बदलने जैसे मामलों में करना चाहिए। यह संबंधित प्रकार की कक्षाओं को कास्ट कर सक