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

C++ में सबएरे का XOR


इस समस्या में, हमें एक arr[] और कुछ क्वेरीज दी गई हैं जो सरणी में L से R तक की रेंज हैं। हमारा कार्य L से R के बीच सबएरे का XOR प्रिंट करना है।

आइए एक उदाहरण से समस्या को समझते हैं,

इनपुट - array = {1, 4, 5, 7, 2, 9} L = 1, R = 5

आउटपुट -

व्याख्या - 4^5^7^2^9

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

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

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

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

उदाहरण

#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. - C++ में सबएरे फ्लिप करके 0 की संख्या को अधिकतम करना

    समस्या कथन एक बाइनरी ऐरे दिया गया है, एक सबएरे के एक फ्लिप की अनुमति के साथ ऐरे में अधिकतम शून्य की संख्या ढूंढें। एक फ्लिप ऑपरेशन सभी 0 को 1 में और 1 को 0 में बदल देता है। यदि arr1 = {1, 1, 0, 0, 0, 0, 0} यदि हम पहले 2 1 को 0 में फ्लिप करते हैं, तो हम आकार 7 का सबएरे प्राप्त कर सकते हैं: {0, 0, 0

  1. - C++ में न्यूनतम XOR वैल्यू पेयर

    समस्या कथन पूर्णांकों का एक ऐरे दिया गया है। उस ऐरे में वह पेयर ढूंढें जिसका XOR वैल्यू न्यूनतम हो उदाहरण यदि arr[] = {10, 20, 30, 40} तो न्यूनतम वैल्यू पेयर 20 और 30 होगा क्योंकि (20 ^ 30) = 10. (10 ^ 20) = 30 (10 ^ 30) = 20 (10 ^ 40) = 34 (20 ^ 30) = 10 (20 ^ 40) = 60 (30 ^ 40) = 54 एल्गोरिदम

  1. - C++ में static_cast

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