ধরুন আমাদের k সংখ্যক ক্যান্ডি আছে। এগুলো আমাদের শিশুদের মধ্যে বিতরণ করতে হবে। এখন কিছু নিয়ম আছে
- এই শিশু i^2 সংখ্যক ক্যান্ডি পাবে
- সূচী 1 থেকে i-i পর্যন্ত সমস্ত শিশুকে পরিবেশন করা না হওয়া পর্যন্ত I-এ কোনো শিশু কোনো মিষ্টি পাবে না
- যদি বাচ্চারা 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