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

सी ++ में एक सबमैट्रिक्स प्रश्नों का एक्सओआर

इस समस्या में, हमें एक N x N मैट्रिक्स और कुछ प्रश्न दिए गए हैं, प्रत्येक क्वेरी में इस मैट्रिक्स से बनाए गए सबमैट्रिक्स के ऊपरी-बाएँ और निचले-दाएँ कोने होते हैं। हमारा काम क्वेरीज़ द्वारा परिभाषित सबमैट्रिक्स के सभी तत्वों के एक्सओआर को खोजना है।

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

इनपुट

arr[][] = {{1, 2, 3}
{4, 5, 6}
{7, 8, 9}}
Querries: {0,0, 1,2} , {1, 2, 2, 2}

आउटपुट

1 15

व्याख्या

querry 1 : 1^2^3^4^5^6
querry 2 : 6^9

इस समस्या को हल करने के लिए, हम प्रश्नों को हल करने के लिए एक उपसर्ग-एक्सओआर मैट्रिक्स पाएंगे। स्थिति (R, C) पर मैट्रिक्स का मान शीर्ष-बाएँ कोने (0, 0) से उप-मैट्रिक्स का XOR और स्थिति (R, C) पर नीचे-दाएँ कोने है।

हमें सबसे पहले उपसर्ग . मिलेगा -XOR मैट्रिक्स की सभी पंक्तियों के लिए एक-एक करके। फिर प्रत्येक कॉलम के लिए एक-एक करके उपसर्ग XOR की गणना करें।

(r1, c1) से (r2, c2) द्वारा दी गई क्वेरी के लिए उप-मैट्रिक्स के XOR को खोजने के लिए उपसर्ग का उपयोग करके गणना की जाती हैXor[r2][c2] ^ prefixXor[r1-1][c2] ^ prefixXor[r2][c1 -1] ^ उपसर्गXor[r1-1][c1-1].

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

उदाहरण

#include <iostream>
using namespace std;
#define n 3
void preXOR(int arr[][n], int prefix_xor[][n]) {
   for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) {
         if (j == 0)
            prefix_xor[i][j] = arr[i][j];
         else
         prefix_xor[i][j]
            = (prefix_xor[i][j - 1] ^ arr[i][j]);
      }
   for (int i = 0; i < n; i++)
      for (int j = 1; j < n; j++)
         prefix_xor[j][i]
            = (prefix_xor[j - 1][i] ^ prefix_xor[j][i]);
}
int XORSubMatrix(int prefix_xor[][n], int querry[2]) {
   int xor_1 = 0, xor_2 = 0, xor_3 = 0;
   if (querry[0] != 0)
      xor_1 = prefix_xor[querry[0] - 1][querry[3]];
   if (querry[1] != 0)
      xor_2 = prefix_xor[querry[2]][querry[1] - 1];
   if (querry[2] != 0 and querry[1] != 0)
      xor_3 = prefix_xor[querry[0] - 1][querry[1] - 1];
   return ((prefix_xor[querry[2]][querry[3]] ^ xor_1) ^ (xor_2 ^ xor_3));
}
int main() {
   int arr[][n] = { { 1, 2, 3 },
      { 4, 5, 6 },
      { 7, 8, 9 } };
   int prefix_xor[n][n];
   preXOR(arr, prefix_xor);
   int querry1[] = {0,0, 2,2} ;
   int querry2[] = {1,2, 2,2} ;
   cout<<"The XOR of submatrix created by querries :\n";
   cout<<"Querry 1 : "<<XORSubMatrix(prefix_xor, querry1)<<endl;
   cout<<"Querry 2 : "<<XORSubMatrix(prefix_xor, querry2)<<endl;
   return 0;
}

आउटपुट

Querry 1 : 1
Querry 2 : 15



  1. सी ++ सभी सबएरे के एक्सओआर के एक्सओआर पर प्रश्न

    दी गई रेंज में मौजूद सभी सबएरे के एक्सओआर की गणना करने और उसे प्रिंट करने के लिए। उदाहरण के लिए Input : arr[] = { 4, 1, 2, 3, 5 }, Q = 3 Queries q1 = { 1, 2 } q2 = { 2, 4 } q3 = { 1, 4 } Output : 0 2 0 Explanation : As the given problem states that we need to find XOR of all the subarrays present

  1. श्रेणी के सबसे बड़े विषम भाजक के XOR पर C++ प्रश्न

    एन पूर्णांकों की एक सरणी और श्रेणियों के क्यू प्रश्नों को देखते हुए। प्रत्येक क्वेरी के लिए, हमें श्रेणी में प्रत्येक संख्या के सबसे बड़े विषम भाजक का XOR वापस करना होगा। सबसे बड़ा विषम भाजक वह सबसे बड़ी विषम संख्या है जो संख्या N को विभाजित कर सकती है, उदा। उदाहरण के लिए, 6 का सबसे बड़ा विषम भाजक

  1. एक पेड़ में एक उपट्री के डीएफएस के लिए सी ++ प्रश्न

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है और हमें एक विशेष नोड से dfs करने की आवश्यकता होती है जिसमें हम दिए गए नोड को रूट मान लेते हैं और उससे dfs निष्पादित करते हैं। उपरोक्त पेड़ में मान लीजिए कि हमें नोड एफ से डीएफएस करने की आवश्यकता है इस ट्यूटोरियल में हम कुछ अपरंपरागत तरीकों को लागू क