সমস্যা বিবরণ
৩টি লাইন সেগমেন্টের সেন্টার এবং দৈর্ঘ্য দেওয়া থাকলে, প্রতিটি সেন্টার কেবল K দূরত্ব সরানো যাবে। তিনটি সেগমেন্টের ইন্টারসেকশন রিজনের দৈর্ঘ্য সর্বোচ্চ কত হবে তা বের করুন।
সমাধানের পদ্ধতি
- সেন্টারগুলো সর্ট করুন:
center[0] <= center[1] <= center[2]। - সর্বোচ্চ দূরত্ব =
center[2] - center[0]। - যদি
center[2] - center[0] >= 2*k + length→ ইন্টারসেকশন ০। - যদি
center[2] - center[0] >= 2*k→ ইন্টারসেকশন =2*k - (center[2] - center[0] - length)। - অন্যথায় ইন্টারসেকশন =
length(পুরোপুরি ওভারল্যাপ)।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int max_intersection(int* center, int length, int k) {
sort(center, center + 3);
if (center[2] - center[0] >= 2 * k + length) {
return 0;
} else if (center[2] - center[0] >= 2 * k) {
return (2 * k - (center[2] - center[0] - length));
} else {
return length;
}
}
int main() {
int center[3] = {1, 2, 3};
int L = 1;
int K = 1;
cout << max_intersection(center, L, K);
return 0;
}
আউটপুট
1
ব্যাখ্যা
সেন্টার: 1, 2, 3। দৈর্ঘ্য ১। K=1।
সেন্ট্রার রেঞ্জ: ৩-১=২। ২k=২।
২k + length = ৩। ২ < ৩, তাই দীয়া শর্তে পড়ে। ইন্টারসেকশন = length = ১।
জটিলতা
- সময়: O(1)
- স্থান: O(1)