ধরুন আমাদের দুটি সংখ্যা s এবং t, এবং n উপাদান সহ আরেকটি অ্যারে D আছে। ড্রিমল্যান্ড সাবওয়ের সার্কেল লাইনে বিভিন্ন স্টেশন রয়েছে। আমরা প্রতিবেশী স্টেশনগুলির সমস্ত জোড়ার মধ্যে দূরত্ব জানি:D[i] হল স্টেশন i এবং i+1 এর মধ্যে দূরত্ব, এবং D[n-1] হল (n-1) এবং 0ম স্টেশনের মধ্যে দূরত্ব। আমাদের s থেকে t পর্যন্ত সবচেয়ে কম দূরত্ব খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি s =1 এর মত হয়; t =3; D =[2, 3, 4, 9], তাহলে আউটপুট হবে 5।
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
n := size of D Define an array arr of size (n + 1), and fill with 0 for initialize i := 1, when i <= n, update (increase i by 1), do: arr[i] := D[i - 1] sum1 := sum1 + arr[i] if s > t, then: swap s and t for initialize i := s, when i < t, update (increase i by 1), do: sum2 := sum2 + arr[i] return minimum of sum2 and (sum1 - sum2)
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; int solve(int s, int t, vector<int> D){ int n = D.size(), sum1 = 0, sum2 = 0; vector<int> arr(n + 1, 0); for (int i = 1; i <= n; i++){ arr[i] = D[i - 1]; sum1 += arr[i]; } if (s > t) swap(s, t); for (int i = s; i < t; i++) sum2 += arr[i]; return min(sum2, sum1 - sum2); } int main(){ int s = 1; int t = 3; vector<int> D = { 2, 3, 4, 9 }; cout << solve(s, t, D) << endl; }
ইনপুট
1, 3, { 2, 3, 4, 9 }
আউটপুট
5