ধরুন আমাদের একটি সংখ্যা n আছে। সুতরাং একটি টুর্নামেন্টে n সংখ্যক দল রয়েছে যার কিছু নিয়ম রয়েছে −
-
যদি বর্তমানে দলের সংখ্যা সমান হয়, তাহলে প্রতিটি দল অন্য দলের সাথে একীভূত হয়। এবং মোট (n/2) ম্যাচ খেলা হয়, সেগুলো থেকে (n/2) বিজয়ী দল পরবর্তী রাউন্ডে চলে যাবে।
-
যদি দলের সংখ্যা বিজোড় হয়, তবে একটি দল এলোমেলোভাবে টুর্নামেন্টে স্থানান্তরিত হয় এবং বাকিরা একত্রিত হয়। তাই মোট (n-1)/2টি ম্যাচ খেলা হয়, এবং (n-1)/2+1 দলগুলিকে বিজয়ী হিসাবে পরবর্তী রাউন্ডে স্থানান্তরিত করা হয়৷
আমাদের খুঁজে বের করতে হবে মোট কতটি ম্যাচ খেলা হয়েছে যাতে আমরা চূড়ান্ত বিজয়ী হতে পারি।
সুতরাং, যদি ইনপুট n =10 এর মত হয়, তাহলে আউটপুট হবে 9 কারণ
-
প্রাথমিকভাবে 5-5টি বিভাগ থাকবে, তার মধ্যে 5 জন যোগ্য হবেন
-
এখন একটি দলকে খেলায় পাস করুন এবং 2-2টি দল ভাগ করুন, তাই 3টি যোগ্য হবে
-
এখন একটি দলকে খেলায় পাস করুন এবং 1-1টি দলকে ভাগ করুন, তাই 2টি যোগ্যতা অর্জন করবে
-
1-1 ভাগ করুন এবং একজন বিজয়ী হিসাবে যোগ্য হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
উত্তর :=0
-
যখন n 1 এর মত নয়, করুন
-
f :=(n/2)
এর ফ্লোর -
অবশিষ্ট :=n মোড 2
-
ans :=ans + f
-
n :=f + অবশিষ্ট
-
-
উত্তর ফেরত দিন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(n): ans = 0 while n != 1: f = n//2 remainder = n % 2 ans += f n = f + remainder return ans n = 10 print(solve(n))
ইনপুট
10
আউটপুট
9