দুটি রেক্টিলিনিয়ার আয়তক্ষেত্র দ্বারা কভার করা মোট এলিয়া বের করতে হবে। প্রতিটি আয়তক্ষেত্র তার নিচের বাম কোণা (bottom-left) এবং উপরের ডান কোণা (top-right) দিয়ে সংজ্ঞায়িত।
সমাধানের ধাপসমূহ
- যদি আয়ত দুটি ওভারল্যাপ না করে (C <= E বা A >= G বা B >= H বা D <= F), তবে মোট এলিয়া = (C-A)*(D-B) + (G-E)*(H-F)।
- অন্যথায়, আড়া়যয় এলিয়া বাদ দিয়ে মোট এলিয়া বের করুন।
- x-কম্পোনেন্ট (A, C, E, G) এবং y-কম্পোনেন্ট (B, D, F, H) আলাদা অ্যারের সাজান।
- সাজানোর পর দুটি মধ্যবর্তী মান থেকে আড়া়যয় এলিয়া বের করুন।
- মোট এলিয়া = আয়ত১ + আয়ত২ - আড়া়যয় এলিয়া।
C++ উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if (C <= E || A >= G || B >= H || D <= F)
return (C - A) * (D - B) + (G - E) * (H - F);
vector<int> h = {A, C, E, G};
vector<int> v = {B, D, F, H};
sort(h.begin(), h.end());
sort(v.begin(), v.end());
long long overlap = 1LL * (h[2] - h[1]) * (v[2] - v[1]);
long long total = 1LL * (C - A) * (D - B) + 1LL * (G - E) * (H - F);
return total - overlap;
}
};
int main() {
Solution ob;
cout << ob.computeArea(-3, 0, 3, 4, 0, -1, 9, 2);
}
ইনপুট
-3 0 3 4 0 -1 9 2
আউটপুট
45