ধরুন আমাদের দুটি স্থানাঙ্ক (x1, y1) এবং (x2, y2) আছে। একটি খরগোশ খাবারের বাক্স টানছে। তিনি শুধুমাত্র 1 ইউনিট আকারের দড়ি দিয়ে একটি দড়ি দিয়ে সংযুক্ত করেছিলেন। খরগোশ বাক্সটিকে 1 ইউনিট দ্বারা একই দিকে সরানোর আগে যেখানে দাঁড়িয়ে আছে সেখানে টেনে নিয়ে যাবে। খরগোশ বাক্সটি না টেনে 1 ইউনিট ডানে, বামে, উপরে বা নীচে সরাতে পারে। এই ক্ষেত্রে, এটি বাক্স থেকে সঠিকভাবে 1 ইউনিট দূরে থাকা আবশ্যক নয়। সে যদি বাক্সটি আবার টেনে আনতে চায়, তাহলে অবশ্যই বাক্সের পাশের একটি বিন্দুতে যেতে হবে। খরগোশ যে কোন সময়ে শুরু করতে পারে। যেকোনো দিক থেকে 1 ইউনিট ভ্রমণ করতে 1 সেকেন্ড সময় লাগে। বাক্সটিকে শুরুর অবস্থান থেকে শেষ অবস্থানে নিয়ে যাওয়ার জন্য আমাদের সর্বনিম্ন সময় খুঁজে বের করতে হবে৷
সুতরাং, ইনপুট যদি x1 =1 এর মত হয়; y1 =1; x2 =2; y2 =2, তাহলে আউটপুট হবে 4, কারণ খরগোশ বিন্দুতে (2,1) শুরু করতে পারে। এটি (3,1) থাকা অবস্থায় বাক্সটিকে (2,1) এ টেনে নিয়ে যায়। তারপরে বাক্সটি না টেনে (3,2) এবং তারপরে (2,2) এ চলে যায়। তারপর, (2,3) যাওয়ার সময় বাক্সটিকে (2,2) এ টেনে আনে। এটি 4 সেকেন্ড সময় নেয়।
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
s := 0 if x1 is not equal to x2 and y1 is not equal to y2, then: s := |x2 - x1| + |y2 - y1| Otherwise s := |x2 - x1| + |y2 - y1| return s
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; int solve(int x1, int y1, int x2, int y2){ int s = 0; if (x1 != x2 && y1 != y2) s = abs(x2 - x1) + abs(y2 - y1) + 2; else s = abs(x2 - x1) + abs(y2 - y1); return s; } int main(){ int x1 = 1; int y1 = 1; int x2 = 2; int y2 = 2; cout << solve(x1, y1, x2, y2) << endl; }
ইনপুট
1, 1, 2, 2
আউটপুট
4