หาพื้นที่รวมของสี่เหลี่ยมสองรูปที่ขนานกับแกนในระนาบ 2D แต่ละรูปกำหนดโดยมุมซ้ายล่าง (A,B) และมุมขวาบน (C,D) สำหรับรูปแรก และ (E,F), (G,H) สำหรับรูปที่สอง
ขั้นตอนการแก้ปัญหา
- คำนวณพื้นที่แต่ละรูป:
width1 = |C-A|, height1 = |D-B|และwidth2 = |G-E|, height2 = |H-F| - พื้นที่รวม =
width1*height1 + width2*height2 - ตรวจสอบการทับซ้อน: หากไม่ทับซ้อน (G<A หรือ E>C หรือ F>D หรือ H<B) ให้คืนพื้นที่รวม
- หากทับซ้อน: หาพื้นที่ทับซ้อนโดยหาพิกัดมุมซ้ายล่าง (p,q) = (max(A,E), max(B,F)) และมุมขวาบน (r,s) = (min(C,G), min(D,H)) แล้วลบพื้นที่ทับซ้อนออกจากพื้นที่รวม
ตัวอย่างโค้ด Python
def solve(A, B, C, D, E, F, G, H):
width1 = abs(C - A)
height1 = abs(D - B)
width2 = abs(G - E)
height2 = abs(H - F)
area = width1 * height1 + width2 * height2
if G < A or E > C or F > D or H < B:
return area
p = max(A, E)
q = max(B, F)
r = min(C, G)
s = min(D, H)
overlap = abs(r - p) * abs(s - q)
return area - overlap
# ทดสอบ
A, B, C, D = -3, 0, 3, 4
E, F, G, H = 0, -1, 9, 2
print(solve(A, B, C, D, E, F, G, H)) # ผลลัพธ์: 45
อินพุตตัวอย่าง
-3, 0, 3, 4, 0, -1, 9, 2
เอาต์พุตตัวอย่าง
45