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

Python में बाल्टी में गेंदों के बीच न्यूनतम बल को अधिकतम करने का प्रोग्राम


मान लीजिए हमें कई बाल्टियाँ और x संख्या में गेंदें दी गई हैं। यदि गेंदों को बाल्टी में डाला जाता है, तो उनके भीतर एक विशेष बल कार्य करता है और हमें गेंदों को इस तरह रखने का तरीका ढूंढना है कि दो गेंदों के बीच न्यूनतम बल अधिकतम हो। पोजीशन p और q की बाल्टी में दो गेंदों के बीच बल |p - q| है। हमें दिया गया इनपुट बाल्टी पोजीशन वाला ऐरे और गेंदों की संख्या x है। हमें उनके बीच न्यूनतम बल ढूंढना है।

उदाहरण के लिए, यदि इनपुट है pos = [2, 4, 6, 8, 10, 12], x = 3, तो आउटपुट 4 होगा।

Python में बाल्टी में गेंदों के बीच न्यूनतम बल को अधिकतम करने का प्रोग्राम

गेंदों को 12 बाल्टियों के दिए गए पोजीशन में ऐरे में रखा जा सकता है। तीन गेंदों को पोजीशन 4, 8, और 12 में रखा जा सकता है और उनके बीच बल 4 होगा। इस मान को और बढ़ाया नहीं जा सकता।

समाधान के चरण

  1. ball_count() फंक्शन परिभाषित करें जो d लेता है:
    • ans := 1
    • curr := pos[0]
    • i को 1 से n तक:
      • यदि pos[i] - curr >= d:
        • ans := ans + 1
        • curr := pos[i]
    • ans वापस करें
  2. n := len(pos)
  3. pos सूची को सॉर्ट करें
  4. left := 0
  5. right := pos[-1] - pos[0]
  6. while left < right:
    • mid := right - (right - left) // 2
    • यदि ball_count(mid) >= x:
      • left := mid
    • अन्यथा:
      • right := mid - 1
  7. left वापस करें

उदाहरण

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

def solve(pos, x):
    n = len(pos)
    pos.sort()
    def ball_count(d):
        ans, curr = 1, pos[0]
        for i in range(1, n):
            if pos[i] - curr >= d:
                ans += 1
                curr = pos[i]
        return ans
    left, right = 0, pos[-1] - pos[0]
    while left < right:
        mid = right - (right - left) // 2
        if ball_count(mid) >= x:
            left = mid
        else:
            right = mid - 1
    return left

print(solve([2, 4, 6, 8, 10, 12], 3))

इनपुट

[2, 4, 6, 8, 10, 12], 3

आउटपुट

4
  1. Python से बाइनरी ट्री की रूट को लीफ नोड पर कैसे बदलें? Python से बाइनरी ट्री की रूट को लीफ नोड पर कैसे बदलें?

    लीफ नोड को नया रूट बनाने के लिए पैरेंट पॉइंटर्स का उपयोग करके ट्री को रीस्ट्रक्चर करें: लेफ्ट चाइल्ड राइट बन जाता है, पैरेंट लेफ्ट बन जाता है। एल्गोरिदम रिकर्सिव हेल्पर helper(node, new_par)। अगर नोड मूल रूट है: पैरेंट सेट करें, लेफ्ट/राइट चाइल्ड जो new_par हैं उन्हें None करें। अगर लेफ्ट चाइल्ड है

  1. Python से बाइनरी ग्रिड में मेजर डायगोनल के ऊपर ज़ीरोज़ के लिए मिनिमम स्वैप्स कैसे ढूंढें? Python से बाइनरी ग्रिड में मेजर डायगोनल के ऊपर ज़ीरोज़ के लिए मिनिमम स्वैप्स कैसे ढूंढें?

    n×n बाइनरी मैट्रिक्स में एडजेसेंट रो स्वैप्स से मेजर डायगोनल के ऊपर सभी एलिमेंट्स 0 करने के लिए मिनिमम स्वैप्स ढूंढें। एल्गोरिदम प्रत्येक रो के लिए राइटमोस्ट 1 की पोजीशन ढूंढें → m[i] = n - j - 1 (डायगोनल से दूरी)। ग्रीडी: i=0 से n-1, ऐसी रो ढूंढें जिसका = n-i-1 हो (यानी डायगोनल के ऊपर 1 न हो)। उसे

  1. Python प्रोग्राम: OpenCV का उपयोग करके इमेज के एज डिटेक्ट करना Python प्रोग्राम: OpenCV का उपयोग करके इमेज के एज डिटेक्ट करना

    इस समस्या में, हम देखेंगे कि Python इमेज या वीडियो फ़ाइल के एज कैसे डिटेक्ट कर सकता है। इसे प्राप्त करने के लिए, हमें OpenCV लाइब्रेरी की आवश्यकता है। OpenCV लाइब्रेरी मुख्य रूप से कंप्यूटर विजन के लिए डिज़ाइन की गई है। यह ओपन सोर्स है। मूल रूप से इसे इंटेल द्वारा डिज़ाइन किया गया था। यह ओपन-सोर्स B