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

C++ में गुब्बारे फोड़ने के लिए तीरों की न्यूनतम संख्या

मान लीजिए कि दो-आयामी अंतरिक्ष में फैले कुछ गोलाकार गुब्बारे हैं। प्रत्येक गुब्बारे के लिए, क्षैतिज व्यास के प्रारंभ और अंत निर्देशांक होते हैं। प्रारंभ हमेशा अंत से छोटा होता है। इसमें अधिकतम 104 गुब्बारे होंगे। एक तीर को एक्स-अक्ष के साथ विभिन्न बिंदुओं से बिल्कुल लंबवत रूप से शूट किया जा सकता है। एक गुब्बारा जिसकी स्थिति xstart से xend है, x पर एक तीर से फट जाता है यदि xstart =x =xend। शूट किए जा सकने वाले तीरों की संख्या की कोई सीमा नहीं है। मान लीजिए कि एक बार गोली मारने वाला तीर असीम रूप से ऊपर की ओर बढ़ता रहता है। हमें सभी गुब्बारों को फोड़ने के लिए कम से कम तीरों की संख्या ज्ञात करनी होगी। तो अगर इनपुट [[10,16], [2,8], [1,6], [7,12]] जैसा है, तो आउटपुट 2 होगा। तो अगर हम एक्स =6 से शूट करते हैं, तो यह [2,8] और [1,6] फटेंगे, और बाकी को फोड़ने के लिए x =11 से एक और गुब्बारा फोड़ेंगे।

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

  • यह जाँचने के लिए कि स्थान प्रतिच्छेद कर रहे हैं या नहीं, प्रतिच्छेद () नामक एक विधि को परिभाषित करें

  • सभी प्रतिच्छेद करने वाले गुब्बारों की रेंज लेने के बाद रेंज में हेरफेर करने के लिए एक अन्य विधि मैनिपुलेट () करती है

  • वास्तविक विधि गुब्बारे की स्थिति को पॉज़ के रूप में ले रही है

  • अंतिम स्थिति के आधार पर पॉज़ ऐरे को सॉर्ट करें

  • n :=गुब्बारों की संख्या, यदि n 0 है, तो वापस 0

  • currEnd :=सोरिंग के बाद पोज़ की पहली प्रविष्टि की अंतिम स्थिति

  • सीएनटी:=1

  • मैं के लिए 1 से n - 1 की सीमा में

    • अगर currEnd

  • वापसी की संख्या

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool intersect(vector <int>& a, vector <int>& b){
      return a[1] >= b[0];
   }
   static bool cmp(vector <int>& a, vector <int>& b){
      return a[1] < b[1];
   }
   void manipulate(vector <int>& a, vector <int>& b){
      a[0] = min(a[0], b[0]);
      a[1] = max(a[1], b[1]);
   }
   int findMinArrowShots(vector<vector<int>>& points) {
      sort(points.begin(), points.end(), cmp);
      int n = points.size();
      if(!n) return 0;
      int currEnd = points[0][1];
      int cnt = 1;
      for(int i = 1; i < n; i++){
         if(currEnd < points[i][0]){
            cnt++;
            currEnd = points[i][1];
         }
      }
      return cnt;
   }
};
main(){
   vector<vector<int>> v = {{10,16},{2,8},{1,6},{7,12}};
   Solution ob;
   cout << (ob.findMinArrowShots(v));
}

इनपुट

[[10,16],[2,8],[1,6],[7,12]]

आउटपुट

2

  1. C++ में पृष्ठों की न्यूनतम संख्या आवंटित करें

    पृष्ठों की न्यूनतम संख्या आवंटित करना एक प्रोग्रामिंग समस्या है। आइए इस समस्या पर विस्तार से चर्चा करें और देखें कि इसका समाधान क्या हो सकता है। बयान आपको n विभिन्न पुस्तकों के पृष्ठों की संख्या . दी गई है . साथ ही, मी छात्र . भी हैं जिन्हें किताबें सौंपी जानी हैं। पुस्तकों को पृष्ठों की संख्या के

  1. सी ++ में तर्कों की परिवर्तनीय संख्या

    कभी-कभी, आप एक ऐसी स्थिति में आ सकते हैं, जब आप एक ऐसा फ़ंक्शन करना चाहते हैं, जो पैरामीटर की पूर्वनिर्धारित संख्या के बजाय तर्कों की चर संख्या, यानी पैरामीटर ले सकता है। सी/सी++ प्रोग्रामिंग भाषा इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक फ़ंक्शन को परिभाषित करने की अनुमति है जो आपकी आवश्

  1. C++ में CHAR_BIT

    CHAR_BIT चार में बिट्स की संख्या है। इसे C++ भाषा में “limits.h” हेडर फाइल में घोषित किया गया है। यह 8-बिट प्रति बाइट का होता है। यहाँ C++ भाषा में CHAR_BIT का एक उदाहरण दिया गया है, उदाहरण #include <bits/stdc++.h> using namespace std; int main() {    int x = 28;    int a