मान लीजिए कि हमारे पास गिनती नामक संख्याओं की एक सूची है जहां मायने रखता है [i] प्रकार की वस्तुओं की संख्या का प्रतिनिधित्व करता है। हमारे पास एक और मूल्य k भी है। हमें k आकार के समूहों की अधिकतम संख्या ज्ञात करनी होगी, जैसे कि प्रत्येक समूह में अलग-अलग प्रकार के आइटम होने चाहिए।
इसलिए, यदि इनपुट काउंट्स =[2, 3, 5, 3] k =2 की तरह है, तो आउटपुट 6 होगा, क्योंकि चार प्रकार की वस्तुओं को क्रमशः a, b, c, d द्वारा दर्शाया जाता है। हमारे पास k =2 के निम्नलिखित समूह हो सकते हैं, जहाँ सभी तत्व अलग-अलग प्रकार के होते हैं:[(c, a), (b, a), (c, b), (c, b), (d, a), (डी, ए)]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को संभव परिभाषित करें ()। यह मायने रखता है, समूह, k
- आवश्यक :=समूह * k
- मेरे लिए 0 से लेकर गिनती के आकार तक के लिए, करें
- अस्थायी:=न्यूनतम गणना[i], समूह और आवश्यक
- आवश्यक:=आवश्यक - अस्थायी
- यदि आवश्यक हो तो 0 के समान है, तो
- सही लौटें
- झूठी वापसी
- एक फ़ंक्शन को हल करें() परिभाषित करें। यह मायने रखेगा, k
- res :=0
- एल :=0
- r :=गणना में मौजूद सभी तत्वों का योग
- जबकि l <=r, करते हैं
- m :=l + (r - l) / 2 की मंजिल
- यदि संभव हो (गिनती, मी, के) सत्य है, तो
- एल :=एम + 1
- res :=अधिकतम रेस और m
- अन्यथा,
- r :=m - 1
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def possible(counts, groups, k): required = groups * k for i in range(len(counts)): temp = min(counts[i], groups, required) required -= temp if required == 0: return True return False def solve(counts, k): res = 0 l = 0 r = sum(counts) while l <= r: m = l + (r - l) // 2 if possible(counts, m, k): l = m + 1 res = max(res, m) else: r = m - 1 return res counts = [2, 3, 5, 3] k = 2 print(solve(counts, k))
इनपुट
[2, 3, 5, 3], 2
आउटपुट
6