১ থেকে N সংখ্যāvाले একটি রিং (ring) দেওয়া আছে। রিং-এ দুটি পয়েন্ট A এবং B আছে। আমরা যেকোনো পয়েন্ট X-এ দাঁড়াতে পারি। লক্ষ্য হলো X কে এমনভাবে বেছে নেওয়া যাতে Z = distance(X, A) + distance(X, B) ন্যূনতম হয়। শর্ত হলো X, A এবং B-র সাথে সমান হবেনা। ন্যূনতম Z মান ফেরত দিতে হবে।
উদাহরণ
ইনপুট: N = 30, A = 10, B = 20
আউটপুট: 10 (X = 15 হলে distance(15,10)=5, distance(15,20)=5, যোগফল=10)
সমাধানের পদ্ধতি
- যদি A > B হয়, তবে সিপ্প করুন।
- ঘড়ির পর্যায়ে (clockwise) দূরত্ব = B - A
- ঘড়ির বিপরীত পর্যায়ে (counter-clockwise) দূরত্ব = (A - 1) + (N - B + 1)
- এই দুটির মধ্যে ন্যূনতম দূরত্ব বের করুন।
- যদি ন্যূনতম দূরত্ব ১ হয়, তবে ৩ ফেরত দিন (কারণ X, A বা B হতে পারবে না)।
- অন্যথায় ন্যূনতম দূরত্ব ফেরত দিন।
পাইথন কোড
def get_min_z(n, a, b):
if a > b:
a, b = b, a
clock_wise_dist = b - a
counter_clock_wise_dist = (a - 1) + (n - b + 1)
minimum_dist = min(clock_wise_dist, counter_clock_wise_dist)
if minimum_dist == 1:
return 3
return minimum_dist
n = 30
a = 10
b = 20
print(get_min_z(n, a, b))
ইনপুট
30, 10, 20
আউটপুট
10