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

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


मान लीजिए हमारे पास एक ऐरे inventory है, जहां inventory[i] प्रारंभ में हमारे पास iवें रंग की गेंदों की संख्या दर्शाता है। हमारे पास एक मान orders भी है, जो ग्राहक द्वारा चाही गई गेंदों की कुल संख्या दर्शाता है। हम गेंदों को किसी भी क्रम में बेच सकते हैं। हमारी इन्वेंट्री में अलग-अलग रंग की गेंदें हैं, ग्राहक किसी भी रंग की गेंदें चाहते हैं। अब गेंदों के मूल्य विशेष प्रकृति के हैं। प्रत्येक रंगीन गेंद का मूल्य उस रंग की गेंदों की संख्या है जो हमारी इन्वेंट्री में हैं। तो अगर हमारे पास वर्तमान में 6 नीली गेंदें हैं, तो ग्राहक पहली नीली गेंद के लिए 6 का भुगतान करेगा। फिर केवल 5 नीली गेंदें बचती हैं, तो अगली नीली गेंद का मूल्य 5 होगा। हमें orders रंगीन गेंदें बेचने के बाद मिलने वाले अधिकतम कुल मूल्य को ढूंढना है। यदि उत्तर बहुत बड़ा है, तो इसे मॉड्यूलो 10^9 + 7 वापस करें।

उदाहरण के लिए, यदि इनपुट है inventory = [5,7], orders = 6, तो आउटपुट 31 होगा क्योंकि हम पहले रंग की गेंद को दो बार मूल्य (5,4) पर बेच सकते हैं, और दूसरे रंग की गेंदों को 4 बार (7,6,5,4), तो कुल लाभ 5+4+7+6+5+4 = 31।

समाधान के चरण

  1. low := 0, high := 10000000
  2. while low < high:
    • mid := (low + high) // 2
    • s := 0
    • inventory में प्रत्येक i के लिए:
      • यदि i > mid:
        • s := s + i - mid
    • यदि s > orders:
      • low := mid + 1
    • अन्यथा:
      • high := mid
  3. mid := (low + high) // 2
  4. ans := 0
  5. inventory में प्रत्येक i के लिए:
    • यदि i > mid:
      • ans := ans + i*(i+1)//2 - mid*(mid+1)//2
      • orders := orders - (i - mid)
  6. ans := ans + orders * mid
  7. ans % (10**9 + 7) वापस करें

उदाहरण

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

def solve(inventory, orders):
    low = 0
    high = 10000000
    while low < high:
        mid = (low + high) // 2
        s = 0
        for i in inventory:
            if i > mid:
                s += i - mid
        if s > orders:
            low = mid + 1
        else:
            high = mid
    mid = (low + high) // 2
    ans = 0
    for i in inventory:
        if i > mid:
            ans += i*(i+1)//2 - mid*(mid+1)//2
            orders -= i - mid
    ans += orders * mid
    return ans % (10**9 + 7)

inventory = [5,7]
orders = 6
print(solve(inventory, orders))

इनपुट

[5,7], 6

आउटपुट

31
  1. - Python प्रोग्राम - k रिबन की समान लंबाई की अधिकतम लंबाई खोजें

    सकारात्मक संख्याओं की सूची दी गई है जो रिबन की लंबाई दर्शाती है, और एक मान k। हम रिबन को जितनी बार चाहें काट सकते हैं, हमें सबसे बड़ी लंबाई r खोजनी है जिससे हम k रिबन लंबाई r के प्राप्त कर सकें। यदि ऐसा समाधान नहीं मिलता, तो -1 लौटाएं। उदाहरण इनपुट: ribbons = [1, 2, 5, 7, 15], k = 5 आउटपुट: 5 व्याख

  1. - पायथन में होल्ड और सेल करके अधिकतम लाभ खोजने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है, जो एक कंपनी के स्टॉक की कीमतों को कालानुक्रमिक क्रम में दर्शाती है। हम प्रति दिन अधिकतम एक शेयर खरीद सकते हैं, लेकिन आप कई स्टॉक रख सकते हैं और किसी भी संख्या में दिनों में स्टॉक बेच सकते हैं। आपके द्वारा अर्जित किए जा सकने वाले अधिकतम लाभ को लौट

  1. Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें Python में इमारतों की अधिकतम ऊंचाई ज्ञात करें

    n इमारतें एक पंक्ति में (1 से n लेबल)। प्रतिबंध: restrictions[i] = (id, max_height)। नियम: ऊंचाई ≥ 0, पहली इमारत की ऊंचाई = 0, आसन्न इमारतों में ऊंचाई अंतर ≤ 1। अधिकतम संभव ऊंचाई खोजें। एल्गोरिदम: दो पास + शिखर गणना प्रतिबंधों को id द्वारा सॉर्ट करें फॉरवर्ड पास: बाएं से दाएं, प्रत्येक प्रतिबंध को