কার্টেসিয়ান প্লেনে (0, 0) পজিশন থেকে (x, y) পয়েন্টে শুধুমাত্র হরিজন্টাল (H) এবং ভার্টিক্যাল (V) মuvements ব্যবহার করে যেতে হবে, প্রতিটি মuvements একক ইউনিটের। ডেস্টিনেশনে পৌঁছানোর একাধিক সম্ভাব্য পথ রয়েছে। প্রতিটি পথে কিছু H এবং কিছু V মuvements থাকে। (উদাহরণস্বরূপ, (0,0) থেকে (2,2) পয়েন্টে যেতে হলে HVVH সম্ভাব্য পথों में से একটি।) যদি আমাদের একটি k মান থাকে, তবে ডেস্টিনেশনে যাওয়ার লেক্সিকোগ্রাফিক্যালি k-তম সবচেয়ে ছোট পথটি খুঁজে বের করতে হবে।
উদাহরণ
ইনপুট: (x, y) = (3, 3), k = 3
আউটপুট: "HHVVVH"
সমাধান পদ্ধতি
paths()ফাংশন ডিফাইন করুন যা x, y প্যারামিটার নেয়।- যদি
min(x, y) < 0হয়, তবে 0 রিটার্ন করুন। - অন্যথায়
factorial(x+y) / factorial(x) / factorial(y)রিটার্ন করুন। - মূল মেথড থেকে:
resনামে একটি খালি লিস্ট তৈরি করুন।(p, q) := (0, 0)সেট করুন।while (p, q) != (x, y)লুপ চালান:n := paths(x - p - 1, y - q)হিসাব করুন।- যদি
p + 1 <= xএবংk < nহয়, তবে:res-এর শেষে 'H' যোগ করুন।p := p + 1করুন।
- অন্যথায়:
k := k - nকরুন।res-এর শেষে 'V' যোগ করুন।q := q + 1করুন।
res-এর ক্যারেক্টারগুলো জয়েন করে রিটার্ন করুন।
পাইথন ইমপ্লিমেন্টেশন
from math import factorial
def paths(x, y):
if min(x, y) < 0:
return 0
return factorial(x + y) // factorial(x) // factorial(y)
def solve(x, y, k):
res = []
p, q = 0, 0
while (p, q) != (x, y):
n = paths(x - p - 1, y - q)
if p + 1 <= x and k < n:
res.append('H')
p += 1
else:
k -= n
res.append('V')
q += 1
return ''.join(res)
# টেস্ট
x, y = 3, 3
k = 3
print(solve(x, y, k)) # আউটপুট: HHVVVH
ইনপুট
(3, 3), 3
আউটপুট
HHVVVH