मान लीजिए हमारे पास k कैंडीज की संख्या है। हमें उन्हें बच्चों में बांटना है। अब कुछ नियम हैं
- इस बच्चे को i^2 कैंडीज की संख्या मिलेगी
- इंडेक्स में कोई भी बच्चा मुझे तब तक कैंडी नहीं मिलेगी जब तक कि इंडेक्स 1 से i-i तक के सभी बच्चों को नहीं परोसा जाता
- यदि ith बच्चों को i^2 कैंडीज नहीं मिलती है, तो यह मान्य सर्व नहीं है।
इसलिए, यदि इनपुट k =20 जैसा है, तो आउटपुट 3 होगा, क्योंकि पहले वाले को 1 मिलेगा, दूसरे को 2^2 =4 मिलेगा, तीसरे को 3^2 =9 मिलेगा, लेकिन चौथे को 4 की आवश्यकता होगी। ^2 =16, लेकिन हमारे पास केवल 6 कैंडी बची हैं, इसलिए यह एक मान्य वितरण नहीं है, इसलिए केवल तीन बच्चों को परोसा जाएगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- बाएं:=0, दाएं:=k
- दाएं-बाएं> 1, करते समय
- मध्य :=तल (बाएं + दाएं) / 2
- यदि मंजिल (मध्य * (मध्य + 1) * (2 * मध्य + 1) / 6)> k, तो
- दाएं:=मध्य
- अन्यथा,
- बाएं:=मध्य
- यदि दाएँ *(दाएँ + 1) *(2 * दाएँ + 1) <=k * 6, तो
- दाएं लौटें
- बाएं लौटें
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(k): left = 0 right = k while (right - left > 1): mid = (left + right) // 2 if (mid * (mid + 1) * (2 * mid + 1) // 6 > k): right = mid else: left = mid if (right * (right + 1) * (2 * right + 1) <= k * 6): return right return left k = 20 print(solve(k))
इनपुट
20
आउटपुट
3