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

C++ में कोको ईटिंग केले

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

तो अगर इनपुट [3,6,7,11] और एच =8 जैसा है, तो आउटपुट 4 होगा।

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

  • ओके () नामक एक विधि को परिभाषित करें, यह सरणी ए, दो मान x और h लेगा

  • समय:=0

  • मैं के लिए 0 से आकार के बीच में

    • समय :=समय + a[i] / x

    • समय:=समय + मैं जब एक [i] मॉड एक्स 0 है

  • सही समय पर लौटें <=एच

  • मुख्य विधि से निम्न कार्य करें

  • n :=पाइल्स ऐरे का आकार, सेट योग :=0, निम्न :=1, उच्च :=0

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

    • उच्च :=अधिकतम बवासीर[i] और उच्च

  • जबकि कम <उच्च

    • मध्य:=निम्न + (उच्च-निम्न) /2

    • यदि ठीक है (बवासीर, मध्य, एच) सत्य है, तो उच्च सेट करें:=मध्य, अन्यथा निम्न:=मध्य + 1

    • यदि ठीक है (बवासीर, मध्य, एच) सत्य है, तो उच्च सेट करें:=मध्य, अन्यथा निम्न:=मध्य + 1

  • उच्च वापसी

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

उदाहरण

#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 sum = 0;
      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;
   }
};
main(){
   vector<int> v = {3,6,7,11};
   Solution ob;
   cout << (ob.minEatingSpeed(v, 8));
}

इनपुट

[3,6,7,11]
8

आउटपुट

4

  1. C++ . में पहचानकर्ता

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

  1. Linux पर C++ का सबसे अच्छा IDE क्या है?

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

  1. Linux पर c++ के लिए शीर्ष IDE क्या है?

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