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

Python में बैग में गेंदों की न्यूनतम सीमा खोजने का प्रोग्राम


मान लीजिए हमारे पास एक ऐरे nums है जहां iवां तत्व nums[i] गेंदों वाले बैग को दर्शाता है। हमारे पास एक और मान mx है। हम अधिकतम mx बार निम्नलिखित ऑपरेशन कर सकते हैं:

  • गेंदों के किसी भी बैग को चुनें और इसे कम से कम एक गेंद वाले दो नए बैग में विभाजित करें।
  • यहां पेनल्टी एक बैग में गेंदों की अधिकतम संख्या है।

हमें ऑपरेशन के बाद पेनल्टी को न्यूनतम करना है। अंत में, हमें ऑपरेशन करने के बाद न्यूनतम संभव पेनल्टी ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है nums = [4,8,16,4], mx = 4, तो आउटपुट 4 होगा क्योंकि हम निम्नलिखित ऑपरेशन कर सकते हैं:

  • प्रारंभ में बैग हैं [4,8,16,4]
  • 16 गेंदों वाले बैग को विभाजित करें: [4,8,8,8,4]
  • प्रत्येक 8 गेंदों वाले बैग को दो 4-4 के बैग में विभाजित करें: [4,4,4,8,8,4]
  • फिर [4,4,4,4,4,8,4]
  • अंत में [4,4,4,4,4,4,4,4], तो न्यूनतम 4 गेंदें हैं, यही पेनल्टी है।

समाधान के चरण

  1. एक फंक्शन helper() परिभाषित करें जो target, mx लेता है
  2. यदि target == 0, तो mx + 1 वापस करें
  3. count := 0
  4. nums में प्रत्येक num के लिए:
    • count := count + (num - 1) // target
  5. count <= mx वापस करें
  6. मुख्य मेथड से:
    • left := max(sum(nums) // (len(nums) + mx), 1)
    • right := max(nums)
    • while left < right:
      • mid := (left + right) // 2
      • यदि helper(mid, mx) नॉन-ज़ीरो है, तो right := mid
      • अन्यथा, left := mid + 1
    • left वापस करें

उदाहरण

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

def helper(target, mx):
    if target == 0:
        return mx + 1
    count = 0
    for num in nums:
        count += (num - 1) // target
    return count <= mx

def solve(nums, mx):
    left, right = max(sum(nums) // (len(nums) + mx), 1), max(nums)
    while left < right:
        mid = (left + right) // 2
        if helper(mid, mx):
            right = mid
        else:
            left = mid + 1
    return left

nums = [4,8,16,4]
mx = 4
print(solve(nums, mx))

इनपुट

[4,8,16,4], 4

आउटपुट

4
  1. पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास एक मान n और cuts नामक एक सरणी है। मान लीजिए n इकाई लंबाई की एक लकड़ी की छड़ी है। छड़ी 0 से n तक लेबल की गई है। यहां cuts[i] एक स्थिति दर्शाता है जहां हम काट सकते हैं। हमें कटौती क्रम में करनी चाहिए, लेकिन हम कटौती के क्रम को अपनी इच्छानुसार बदल सकते हैं। यहां एक कटौती की लागत का

  1. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

    मान लीजिए हमारे पास points नामक एक ऐरे है जिसमें कुछ पॉइंट्स (x, y) के रूप में हैं। अब दो पॉइंट्स (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच की मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी पॉइंट्स को जोड़ने की न्यूनतम लागत ढूंढनी है। उदाहरण के लिए, यदि इनपुट है points = [(0,0),(

  1. - पायथन में लॉसी रन-लेंथ एन्कोडिंग की न्यूनतम लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक लोअरकेस स्ट्रिंग s और एक मान k है। अब एक ऑपरेशन पर विचार करें जहां हम एक स्ट्रिंग पर रन-लेंथ एन्कोडिंग करते हैं जिसमें दोहराए गए क्रमिक वर्णों को एक गिनती और वर्ण के रूप में रखा जाता है। इसलिए यदि स्ट्रिंग aaabbc जैसी है तो इसे 3a2bc के रूप में एन्कोड किया जाएगा। यहां हम c के