ধরুন আমাদের n সারি এবং m কলাম সহ একটি গ্রিড আছে। অমল আর বিমল সেই গ্রিডে একটা খেলা খেলছে। খেলার নিয়ম নিচের মত -
অমল উপরের সারিতে কোথাও সাদা পদ্মের টালি রাখে এবং বিমল নীচের সারিতে কোথাও একটি শুঁয়োপোকা টালি রাখে। অমল খেলা শুরু করে এবং তারা বিকল্পভাবে খেলছে। অমল তার টাইলকে বর্তমান কক্ষের গ্রিডের ভিতরে অবস্থিত 8টি সংলগ্ন কক্ষের যে কোন একটিতে স্থানান্তর করতে পারে, কিন্তু বিমলের শুঁয়োপোকা টাইল শুধুমাত্র গ্রিডের ভিতরে বাম বা ডানে যেতে পারে, অথবা একই অবস্থানে থাকতে পারে। অমলের লক্ষ্য যতটা সম্ভব কম চাল ব্যবহার করে বিমলকে ধরা, অন্যদিকে বিমলকে (শুঁয়োপোকা টালি দিয়ে) যতদিন সম্ভব বেঁচে থাকতে হবে। যদি তারা তাদের পদ্ম এবং শুঁয়োপোকা রাখার জন্য এলোমেলোভাবে দুটি কলাম নির্বাচন করে, তাহলে আমাদের এই গেমটি জয়ের জন্য অমলের প্রত্যাশিত সংখ্যক চাল খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুট n =5 m =7 এর মত হয়, তাহলে আউটপুট হবে 4.571428571428571।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- r :=0 0 থেকে m - 1 এর মধ্যে l এর জন্য
- করুন
- তাপ :=n - 1.0
- যদি l>=n, তাহলে
- temp :=temp + (l - n + 1) * ((l - 1) / m)
- যদি l
- temp :=temp + (m - n - l) * ((m - l - 2) / m)
- r :=r + temp / m
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(n, m): r = 0 for l in range(m): temp = n - 1.0 if l >= n: temp += (l - n + 1) * ((l - 1) / m) if l < m - n: temp += (m - n - l) * ((m - l - 2) / m) r += temp / m return r n = 5 m = 7 print(solve(n, m))
ইনপুট
5, 7
আউটপুট
4.571428571428571