संख्याओं की समता, यानी यह सम है या विषम, और दी गई रेंज के लिए प्रायिकता खोजने के लिए। प्रत्येक क्वेरी के लिए, हमें p और q प्रिंट करने होंगे जो प्रायिकता को p / q से दर्शाते हैं, उदाहरण के लिए।
इनपुट: N = 5, arr[] = { 6, 5, 2, 1, 7 } क्वेरी 1: 0 2 2 क्वेरी 2: 1 2 5 क्वेरी 3: 0 1 4 आउटपुट: 0 3 4 1 2इस समस्या में, हम दो सरणियों को बनाए रखेंगे जिनमें उस इंडेक्स तक मौजूद विषम और सम संख्याओं की संख्या होगी। यह हमारी समस्या को सरल बनाता है, और अब हमें उस रेंज में मौजूद तत्वों की संख्या और उनकी गिनती प्रिंट करनी होगी।
समाधान खोजने का दृष्टिकोण
इस दृष्टिकोण में, हम दो सरणियों को बनाए रखते हैं। वे ith इंडेक्स तक पाए गए सम और विषम संख्याओं की संख्या रखते हैं और इस समस्या को प्रीफिक्स योग समस्याओं की तरह हल करते हैं।
उदाहरण
#include <bits/stdc++.h> using namespace std; void solve(int arr[], int n, int Q,int query[][3]){ int even[n + 1]; // ith इंडेक्स तक मिली सम संख्याओं की गिनती के लिए हमारी सरणी int odd[n + 1]; // ith इंडेक्स तक मिली विषम संख्याओं की गिनती के लिए हमारी सरणी even[0] = 0; odd[0] = 0; // चूंकि हम 1 आधारित इंडेक्सिंग कर रहे हैं इसलिए हम दोनों सरणियों के 0th इंडेक्स को 0 सेट करते हैं for (int i = 0; i < n; i++) { if (arr[i] & 1) { // यदि हमें विषम संख्या मिलती है तो हम odd बढ़ाते हैं odd[i + 1] = odd[i] + 1; even[i + 1] = even[i]; } else { // अन्यथा हम even बढ़ाते हैं even[i + 1] = even[i] + 1; odd[i + 1] = odd[i]; } } for (int i = 0; i < Q; i++) { // क्वेरीज़ को पार करना int r = query[i][2]; // राइट रेंज int l = query[i][1]; // लेफ्ट रेंज int k = query[i][0]; // क्वेरी का प्रकार int q = r - l + 1; // दी गई रेंज में तत्वों की संख्या int p; if (k) // k क्वेरी का प्रकार है और हम दी गई रेंज में समान समता वाले तत्वों की संख्या खोज रहे हैं p = odd[r] - odd[l - 1]; else p = even[r] - even[l - 1]; if (!p) // यदि p शून्य है तो हम बस 0 प्रिंट करते हैं cout << "0\n"; else if (p == q) // यदि p == q तो हम 1 प्रिंट करते हैं cout << "1\n"; else { int g = __gcd(p, q); cout << p / g << " " << q / g << "\n"; // चूंकि p और q का कोई सामान्य gcd नहीं होना चाहिए इसलिए हम gcd से विभाजित करते हैं } } } int main(){ int arr[] = { 6, 5, 2, 1, 7 }; // दी गई सरणी int n = sizeof(arr) / sizeof(int); // हमारी सरणी का आकार int Q = 2; // हमारी क्वेरीज़ की संख्या int query[Q][3] = {{ 0, 2, 2 },{ 1, 2, 5 }}; // दी गई क्वेरीज़ solve(arr, n, Q, query); return 0; }आउटपुट
0 3 4
उपरोक्त कोड की व्याख्या
उपरोक्त दृष्टिकोण में, हम दो सरणियों को बनाए रखकर ith इंडेक्स तक मिली सम और विषम संख्याओं की गिनती करते हैं। अब हमें दी गई रेंज में मौजूद सम या विषम संख्याओं की संख्या निकालनी है और वह संख्या और उस रेंज में मौजूद कुल तत्वों की संख्या प्रिंट करनी है।
निष्कर्ष
इस ट्यूटोरियल में, हमने दी गई रेंज में सम या विषम संख्याओं की प्रायिकता पर क्वेरीज़ को हल किया। हमने इस समस्या के लिए C++ प्रोग्राम और पूरा दृष्टिकोण (सामान्य) भी सीखा जिससे हमने इस समस्या को हल किया। हम यही प्रोग्राम C, Java, Python आदि अन्य भाषाओं में भी लिख सकते हैं। आशा है आपको यह ट्यूटोरियल उपयोगी लगा होगा।