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

C++ में कोको ईटिंग बनानाज (Koko Eating Bananas)


मान लीजिए हमारे पास N केले के ढेर हैं, i-वें ढेर में piles[i] केले हैं। यहां गार्ड चले गए हैं और H घंटे में वापस आएंगे। कोको अपनी केले-प्रति-घंटा खाने की गति K तय कर सकती है। प्रत्येक घंटे, वह केले के किसी ढेर को लेती है, और उस ढेर से K केले खाती है। यदि ढेर में K से कम केले हैं, तो वह उन सभी को खा लेती है, और उस घंटे में और केले नहीं खाएगी। कोको धीरे खाना पसंद करती है, लेकिन फिर भी गार्ड के वापस आने से पहले सभी केले खत्म करना चाहती है। हमें न्यूनतम पूर्णांक K खोजना है जैसे कि वह H घंटे के भीतर सभी केले खा सके।

उदाहरण के लिए, यदि इनपुट [3,6,7,11] है और H = 8, तो आउटपुट 4 होगा।

समाधान दृष्टिकोण

  1. ok() विधि: दिए गए गति x पर सभी केले खाने में लगने वाला समय ≤ H है या नहीं जांचें

  2. समय = Σ(piles[i]/x + (piles[i]%x ? 1 : 0)) की गणना करें

  3. बाइनरी सर्च: low=1, high=max(piles)

  4. mid = (low+high)/2, यदि ok(mid) तो high=mid अन्यथा low=mid+1

  5. high लौटाएं

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 
typedef long long int lli; 

class Solution { 
public: 
    bool ok(vector<int>& a, int x, int H){ 
        int time = 0; 
        for(int i = 0; i < a.size(); i++){ 
            time += a[i] / x; 
            time += (a[i] % x ? 1 : 0); 
        } 
        return time <= H; 
    } 
    
    int minEatingSpeed(vector<int>& piles, int H) { 
        int n = piles.size(); 
        lli low = 1; 
        lli high = 0; 
        for(int i = 0; i < n; i++) high = max((lli)piles[i], high); 
        while(low < high){ 
            int mid = low + (high - low) / 2; 
            if(ok(piles, mid, H)){ 
                high = mid; 
            }else{ 
                low = mid + 1; 
            } 
        } 
        return high; 
    } 
}; 

int main(){ 
    vector<int> v = {3,6,7,11}; 
    Solution ob; 
    cout << (ob.minEatingSpeed(v, 8)); 
    return 0; 
}

इनपुट

[3,6,7,11] 8

आउटपुट

4
  1. - C++ में आइडेंटिफायर

    C++ आइडेंटिफायर एक नाम है जिसका उपयोग वेरिएबल, फ़ंक्शन, क्लास, मॉड्यूल, या किसी अन्य उपयोगकर्ता-परिभाषित आइटम की पहचान के लिए किया जाता है। एक आइडेंटिफायर A से Z या a से z तक के अक्षर या अंडरस्कोर (_) से शुरू होता है जिसके बाद शून्य या अधिक अक्षर, अंडरस्कोर, और अंक (0 से 9) आ सकते हैं। C++ आइडेंटिफ

  1. - लिनक्स पर C++ के लिए सर्वश्रेष्ठ IDE कौन सा है?

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। लिनक्स पर C++ के लिए कोई एक सर्वश्रेष्ठ IDE नहीं है; आपको अपने टूल को

  1. - लिनक्स पर C++ के लिए शीर्ष IDE

    बड़े प्रोजेक्ट्स को केवल टेक्स्ट एडिटर्स पर प्रबंधित करना मुश्किल होता है। ऐसे मामलों में IDE का उपयोग करने से आप अधिक उत्पादक और कम निराश होंगे। विभिन्न प्रकार के IDE उपलब्ध हैं और आपको अपनी आवश्यकताओं के अनुरूप सही चुनना चाहिए। यहां लिनक्स के लिए सर्वश्रेष्ठ C/C++ IDEs की सूची दी गई है। NetBeans