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

सी ++ में एक सबरे की एक्सओआर क्वेरीज़


मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की सरणी गिरफ्तारी है और सरणी क्वेरीज जहां क्वेरीज़ [i] =[Li, Ri], प्रत्येक क्वेरी के लिए मैं Li से Ri तक के तत्वों के XOR की गणना करता हूं (अर्थात, arr[Li] XOR arr[Li+1] xor ... xor arr[Ri] )। हमें दिए गए प्रश्नों के परिणाम वाले सरणी को ढूंढना है। तो अगर इनपुट की तरह है - [1,3,4,8], और प्रश्न [[0,1], [1,2], [0,3], [3,3]] जैसे हैं, तो परिणाम [2,7,14,8] होगा। ऐसा इसलिए है क्योंकि सरणी में तत्वों का द्विआधारी प्रतिनिधित्व - 1 =0001, 3 =0011, 4 =0100 और 8 =1000 है। फिर प्रश्नों के लिए XOR मान हैं - [0,1] =1 xor 3 =2, [1,2] =3 xor 4 =7, [0,3] =1 xor 3 xor 4 xor 8 =14 और [3,3] =8

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=गिरफ्तारी का आकार
  • पूर्व नामक एक सरणी को परिभाषित करें, आकार n + 1 का, फिर पूर्व भरें, जैसे कि पूर्व[i] :=पूर्व[i – 1] XOR arr[i – 1]
  • किसी अन्य सरणी उत्तर को परिभाषित करें
  • मैं के लिए 0 से लेकर प्रश्नों की संख्या तक - 1
    • l :=querys[i, 0], r :=querys[i, 1]
    • l और r को 1 से बढ़ाएं
    • उत्तर में
    • प्री[आर] एक्सओआर प्री[एल -1] डालें
  • वापसी उत्तर

उदाहरण(C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
      int n = arr.size();
      vector <int> pre(n + 1);
      for(int i = 1; i <=n; i++){
         pre[i] = pre[i - 1] ^ arr[i - 1];
      }
      vector <int> ans;
      for(int i = 0; i < queries.size(); i++){
         int l = queries[i][0];
         int r = queries[i][1];
         l++;
         r++;
         ans.push_back(pre[r] ^ pre[l - 1]);
      }
      return ans;
   }
};
main(){
   vector<int> v = {1,3,4,8};
   vector<vector<int>> v1 = {{0,1},{1,2},{0,3},{3,3}};
   Solution ob;
   print_vector(ob.xorQueries(v, v1));
}

इनपुट

[1,3,4,8]
[[0,1],[1,2],[0,3],[3,3]]

आउटपुट

[2,7,14,8]

  1. सी++ में अधिकतम सबरे योग मॉड्यूलो एम

    इस समस्या में, हमें n आकार की एक सरणी और एक पूर्णांक m दिया जाता है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो C++ में अधिकतम सबअरे योग मॉड्यूल m ढूंढेगा। कार्यक्रम विवरण - यहां, हम सबएरे के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान प्राप्त करेंगे। समस्या को समझने के लिए एक उदाहरण लेत

  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 एल्गोरिदम दि