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

C++ में ईंधन भरने के स्टॉप की न्यूनतम संख्या

मान लीजिए कि एक कार है, जो शुरुआती स्थिति से एक गंतव्य तक जाती है, जो शुरुआती स्थिति से t मील पूर्व में है।

अब रास्ते में कई गैस स्टेशन हैं। तो प्रत्येक स्टेशन [i] एक गैस स्टेशन का प्रतिनिधित्व करता है जो स्टेशन [i] [0] प्रारंभिक स्थिति से मील पूर्व में है, और उस स्टेशन में स्टेशन [i] [1] लीटर गैस है।

अगर कार एक अनंत आकार के गैस टैंक से शुरू होती है, जिसमें शुरू में ईंधन लीटर ईंधन शुरू होता है। यह हर 1 मील में 1 लीटर गैस का उपयोग करती है जिसे वह चलाती है।

जब कार एक गैस स्टेशन पर पहुँचती है, तो वह रुक सकती है और ईंधन भरवा सकती है, इसलिए अब यह स्टेशन से सभी गैस को कार में स्थानांतरित कर देती है। हमें यह पता लगाना होगा कि अपने गंतव्य तक पहुंचने के लिए कार को कितने कम से कम ईंधन भरने के स्टॉप बनाने चाहिए? यदि गंतव्य तक पहुंचना असंभव है, तो -1 लौटें।

इसलिए, यदि इनपुट टारगेट =100, स्टार्टफ्यूएल =20, स्टेशन =[10,40], [20,30], [30,20], [60,40] जैसा है, तो आउटपुट 3 होगा। तो शुरू में 10 लीटर गैस है, पहले स्टेशन पर पहुंचने के बाद 40 लीटर गैस ट्रांसफर करेगी, इसलिए वर्तमान में (0 + 40) =40 लीटर गैस है, फिर तीसरे स्टेशन पर पहुंचें अब 20 लीटर गैस ट्रांसफर करें, इसलिए करंट मात्रा (20+20) =40 है, तो अंतिम स्टेशन पर पहुंचें, 40 लीटर गैस लें, इसलिए वर्तमान मात्रा (10 + 40) =50, अब तक हमने 60 मील की दूरी तय की है, इसलिए हमें पहुंचने के लिए 40 मील और जाना होगा गंतव्य, लक्ष्य तक पहुंचने के लिए पर्याप्त गैस है।

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

  • वर्तमान:=0

  • सरणी सेंट को सॉर्ट करें

  • प्राथमिकता कतार pq परिभाषित करें

  • मैं:=0, सीएनटी:=0

  • curr :=curr + फ्यूल

  • जबकि curr

    • (cnt 1 से बढ़ाएँ)

    • जबकि (i

      • pq में st[i, 1] डालें

      • (i 1 से बढ़ाएँ)

    • अगर pq खाली है, तो -

      • लूप से बाहर आएं

    • curr :=curr + pq का शीर्ष तत्व

    • pq से तत्व हटाएं

  • वापसी (यदि curr>=लक्ष्य, तो cnt, अन्यथा -1)

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minRefuelStops(int target, int fuel, vector<vector<int>> &st) {
      int curr = 0;
      sort(st.begin(), st.end());
      priority_queue<int> pq;
      int i = 0;
      int cnt = 0;
      curr += fuel;
      while (curr < target) {
         cnt++;
         while (i < st.size() && st[i][0] <= curr) {
            pq.push(st[i][1]);
            i++;
         }
         if (pq.empty())
            break;
         curr += pq.top();
         pq.pop();
      }
      return curr >= target ? cnt : -1;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{10,40},{20,30},{30,20},{60,40}};
   cout << (ob.minRefuelStops(100, 10, v));
}

इनपुट

100, 10, {{10,40},{20,30},{30,20},{60,40}}

आउटपुट

3

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की

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

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