मान लीजिए हमें कई बाल्टियाँ और x संख्या में गेंदें दी गई हैं। यदि गेंदों को बाल्टी में डाल दिया जाता है, तो उनके भीतर एक विशेष बल कार्य करता है और हमें दो गेंदों के बीच न्यूनतम बल को अधिकतम करने का एक तरीका खोजना होगा। स्थिति p और q की बाल्टी में दो गेंदों के बीच का बल |p - q| है। हमें दिया गया इनपुट वह सरणी है जिसमें बकेट पोजीशन और गेंदों की संख्या x होती है। हमें उनके बीच न्यूनतम बल का पता लगाना होगा।
इसलिए, यदि इनपुट pos =[2, 4, 6, 8, 10, 12], x =3 जैसा है, तो आउटपुट 4 होगा।
गेंदों को 12 बाल्टी की एक सरणी में दी गई स्थिति में रखा जा सकता है। तीन गेंदों को 4, 8 और 12 की स्थिति में रखा जा सकता है और उनके बीच की शक्ति 4 होगी। इस मान को और नहीं बढ़ाया जा सकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक फ़ंक्शन को परिभाषित करें ball_count() । इसमें घ लगेगा
-
और :=1
-
वर्तमान:=स्थिति [0]
-
1 से n की सीमा में i के लिए, करें
-
अगर pos[i] - curr>=d, तो
-
उत्तर:=उत्तर + 1
-
वर्तमान:=स्थिति [i]
-
-
-
वापसी उत्तर
-
-
n :=स्थिति का आकार
-
सूची स्थिति को क्रमबद्ध करें
-
बायां :=0
-
दाएं:=स्थिति[-1] - स्थिति[0]
-
जबकि बाएं <दाएं, करें
-
मध्य :=दाएँ - तल का मान ((दाएँ - बाएँ) / 2)
-
अगर बॉल_काउंट (मध्य)>=x, तो
-
बाएं :=मध्य
-
-
अन्यथा,
-
दाएं:=मध्य - 1
-
-
-
बाएं लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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