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

C++ . में गैस स्टेशन से अधिकतम दूरी कम से कम करें

मान लीजिए हमारे पास एक क्षैतिज संख्या रेखा है। उस नंबर लाइन पर, हमारे पास स्थिति स्टेशनों [0], स्टेशनों [1], ..., स्टेशनों [एन -1] पर गैस स्टेशन हैं, जहां एन =स्टेशनों की सरणी का आकार। अब, हम K और गैस स्टेशन जोड़ते हैं ताकि D, आसन्न गैस स्टेशनों के बीच की अधिकतम दूरी कम से कम हो। हमें D का न्यूनतम संभव मान ज्ञात करना है।

इसलिए, यदि इनपुट स्टेशनों की तरह है =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], K =9, तो आउटपुट 0.5

होगा।

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

  • फ़ंक्शन को परिभाषित करें ठीक (), इसमें x, सरणी v,

    लगेगा
  • रिट:=0

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • रिट :=रिट + सीलिंग ऑफ़ (v[i + 1] - v[i]) / x

  • वापसी रिट

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

  • कम :=0

  • n :=s का आकार

  • उच्च :=s[n - 1] - s[0]

  • जबकि उच्च - निम्न>=1e-6, करें −

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

    • एक्स:=ठीक है (मध्य, एस)

    • यदि x> K, तो -

      • कम :=मध्य

    • अन्यथा

      • उच्च :=मध्य

  • उच्च वापसी

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int ok(double x, vector <int>& v){
      int ret = 0;
      for (int i = 0; i < v.size() - 1; i++) {
         ret += ceil((v[i + 1] - v[i]) / x) - 1;
      }
      return ret;
   }
   double minmaxGasDist(vector<int>& s, int K) {
      double low = 0;
      int n = s.size();
      double high = s[n - 1] - s[0];
      while (high - low >= 1e-6) {
         double mid = (low + high) / 2.0;
         int x = ok(mid, s);
         if (x > K) {
            low = mid;
         }
         else {
            high = mid;
         }
      }
      return high;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,7,8,9,10};
   cout << (ob.minmaxGasDist(v, 9));
}

इनपुट

{1,2,3,4,5,6,7,8,9,10}, 9

आउटपुट

0.5

  1. सी++ में वन एडिट डिस्टेंस

    मान लीजिए कि हमारे पास दो तार s और t हैं; हमें यह जांचना होगा कि क्या वे दोनों एक संपादन दूरी अलग हैं। एक संपादन दूरी तीन प्रकार की होती है - t प्राप्त करने के लिए s में एक वर्ण डालें t प्राप्त करने के लिए s से एक वर्ण हटाएं t पाने के लिए s का वर्ण बदलें इसलिए, यदि इनपुट s =ab, t =acb जै

  1. C++ में किसी भी शहर और स्टेशन के बीच अधिकतम दूरी ज्ञात कीजिए

    अवधारणा दिए गए शहरों की संख्या के संबंध में एन की संख्या 0 से एन -1 तक और जिन शहरों में स्टेशन स्थित हैं, हमारा काम किसी भी शहर और उसके निकटतम स्टेशन के बीच अधिकतम दूरी निर्धारित करना है। यह ध्यान दिया जाना चाहिए कि स्टेशनों वाले शहरों को किसी भी क्रम में दिया जा सकता है। इनपुट numOfCities = 6, sta

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा