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

C++ में दिए गए बिंदुओं को समाहित करने वाले खंडों की अधिकतम संख्या

दिए गए बिंदुओं को समाहित करने वाले अधिकतम खंडों को खोजने का कार्य दिया गया है।

एक सरणी को देखते हुए a1[] आकार n1 के साथ और दो पूर्णांक A और B दिए गए हैं। दिए गए एरे से a1[],n1 लाइन सेगमेंट को शुरुआती और अंतिम बिंदुओं के साथ a1[i] – A और a1[i] + क्रमशः बनाया जा सकता है।

एक अन्य सरणी a2[] को n2 अंकों के साथ दिया गया है। इन बिंदुओं को रेखाखंडों को इस प्रकार निर्दिष्ट किया जाना है कि एक बिंदु निर्दिष्ट किए गए रेखाखंडों की संख्या अधिकतम हो। ध्यान दें कि एक एकल बिंदु किसी दिए गए रेखा खंड को केवल एक बार सौंपा जा सकता है।

आइए अब एक उदाहरण का उपयोग करके समझते हैं कि हमें क्या करना है:

इनपुट

a1[] = {1, 4, 5}, a2[] = {2, 8}, A = 1, B = 2

आउटपुट

1

स्पष्टीकरण - रेखा खंड जो बिंदुओं a1[i] - A और a1[i] + B का उपयोग करके बनाए जा सकते हैं, वे हैं (0, 6) और (3, 7)।

सरणी में पहला बिंदु a2[], यानी 2 को पहली पंक्ति खंड को सौंपा जा सकता है जबकि अगला बिंदु 8 किसी भी रेखा खंड को नहीं सौंपा जा सकता है। इसलिए, केवल 1 लाइन सेगमेंट को एक पॉइंट दिया जा सकता है और आउटपुट 1 हो जाता है।

इनपुट

a1[] = {1, 2, 3, 4, 6, 7}, a2[] = {2, 5, 6, 8}, A = 0, B = 1

आउटपुट

4

निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है

  • मुख्य फ़ंक्शन में कुछ मानों के साथ वैक्टर a1 और a2 और पूर्णांक A और B को प्रारंभ करें।

  • वेरिएबल n1 और n2 बनाएं और उनमें क्रमशः वेक्टर a1 और a2 के आकार को स्टोर करें।

  • मैक्स () फ़ंक्शन में पहले दोनों वैक्टर a1 और a2 को सॉर्ट करें।

  • क्रमशः वेक्टर a2 और अंतिम उत्तर का ट्रैक रखने के लिए j =0 और ans =0 को प्रारंभ करें।

  • लूप i =0 से i

  • फॉर लूप के अंदर एक और जबकि लूप कंडीशन j

  • जांचें कि क्या (ए 1 [i] + बी <ए 2 [जे])। अगर ऐसा है तो थोड़ी देर के लूप से बाहर निकलें।

  • और जांचें कि क्या (a2[j]>=a1[i] - A &&a2[j] <=a1[i] + B)। यदि ऐसा है तो उत्तर और j को बढ़ाएँ और जबकि लूप से बाहर निकलें।

  • यदि उपरोक्त में से कोई भी कथन सत्य नहीं है, तो केवल j बढ़ाएँ।

  • वापसी उत्तर

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int Max(vector<int> a1, vector<int> a2, int n1, int n2, int A, int B){
   //sorting a1 and a2
   sort(a1.begin(), a1.end());
   sort(a2.begin(), a2.end());
   int j = 0;
   int ans = 0;
   for (int i = 0; i < n1; i++){
      // searching for point
      while (j < n2){
         /* If ending point of segment is
         smaller than the current point*/
         if (a1[i] + B < a2[j])
            break;
            //
         if (a2[j] >= a1[i] - A && a2[j] <= a1[i] + B){
            ans++;
            j++;
            break;
         }
         else
            j++;
      }
   }
   return ans;
}
// main function
int main(){
   int A = 0, B = 1;
   vector<int> a1 = { 1, 2, 3, 4, 6, 7 };
   int n1 = a1.size();
   vector<int> a2 = { 2, 5, 6, 8 };
   int n2 = a2.size();
   cout << Max(a1, a2, n1, n2, A, B);
   return 0;
}

आउटपुट

4

  1. C++ प्रोग्राम अधिकतम संख्या में कक्षों का पता लगाने के लिए जिन्हें प्रकाशित किया जा सकता है

    मान लीजिए, हमें h * w आयामों का एक ग्रिड दिया गया है। ग्रिड में कोशिकाओं में या तो एक बल्ब या बाधाएं हो सकती हैं। एक लाइट बल्ब सेल अपने दाएं, बाएं, ऊपर और नीचे की कोशिकाओं को रोशन करता है और प्रकाश कोशिकाओं के माध्यम से चमक सकता है जब तक कि कोई बाधा सेल प्रकाश को अवरुद्ध न करे। एक बाधा सेल को रोशन न

  1. C++ प्रोग्राम स्कोर की अधिकतम राशि का पता लगाने के लिए जिसे ग्राफ़ से घटाया जा सकता है

    मान लीजिए, एक भारित, अप्रत्यक्ष ग्राफ है जिसमें n कोने और m किनारे हैं। ग्राफ़ के स्कोर को ग्राफ़ में सभी किनारों के वज़न के योग के रूप में परिभाषित किया गया है। किनारे के वजन नकारात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाता है तो ग्राफ का स्कोर बढ़ जाता है। हमें क्या करना है, हमें ग्राफ को कनेक्ट

  1. अधिकतम संख्या जिसे C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित किया जा सकता है

    यह देखते हुए कि कार्य सात खंड प्रदर्शन की चींटी संख्या पर N खंड का उपयोग करके प्रदर्शित की जा सकने वाली अधिकतम संख्या ज्ञात करना है। आइए अब समझते हैं कि हमें एक उदाहरण का उपयोग करके क्या करना है - इनपुट -एन=5 आउटपुट - 71 स्पष्टीकरण − सबसे बड़ी संख्या सात खंडों के प्रदर्शन पर निम्नानुसार प्रदर्शि