Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Diện tích hình chữ nhật trong C++

Cho hai hình chữ nhật vuông góc trong mặt phẳng 2D, mỗi hình được xác định bởi tọa độ góc dưới bên trái (A, B) và góc trên bên phải (C, D) cho hình thứ nhất, (E, F) và (G, H) cho hình thứ hai. Yêu cầu tính tổng diện tích được bao phủ bởi cả hai hình chữ nhật.

Thuật toán giải quyết

  1. Kiểm tra trường hợp không giao nhau: nếu C <= E hoặc A >= G hoặc B >= H hoặc D <= F → trả về tổng diện tích hai hình chữ nhật riêng biệt.
  2. Nếu có giao nhau:
    • Tạo mảng h chứa các hoành độ: A, C, E, G.
    • Tạo mảng v chứa các tung độ: B, D, F, H.
    • Sắp xếp cả hai mảng.
    • Diện tích giao nhau = (h[2] - h[1]) * (v[2] - v[1]).
    • Tổng diện tích = diện tích hình 1 + diện tích hình 2 - diện tích giao nhau.

Ví dụ minh họa (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 temp = 1LL * (h[2] - h[1]) * (v[2] - v[1]);
        long long total = 1LL * (C - A) * (D - B) + 1LL * (G - E) * (H - F) - temp;
        return total;
    }
};

int main() {
    Solution ob;
    cout << ob.computeArea(-3, 0, 3, 4, 0, -1, 9, 2);
}

Đầu vào

-3 0 3 4 0 -1 9 2

Đầu ra

45