# 資訊之芽 2024 C班階段考 pC 題解
## 題目

給定兩個長方形左下與右上角的座標,計算它們涵蓋的總面積。
## 思路
**總面積 $=$ 兩個長方形面積加總 $-$ 重合的面積**
因此我們先計算兩個長方形的面積總和,再計算重合面積,相減就可以得到涵蓋總面積。
### 計算重合面積
這題花較多時間的問題就是如何計算重合面積。如果你沒有想法,可以參考以下的邏輯:
+ 如果兩個長方形「右上角的 $x$」最小值比兩個長方形「左下角的 $x$」最大值還大,就表示兩個長方形在 $x$ 方向有重疊的部分。
+ 同理,如果兩個長方形「右上角的 $y$」最小值比兩個長方形「左下角的 $y$」最大值還大,就表示兩個長方形在 $y$ 方向有重疊的部分。
+ 如果以上兩個條件皆成立,表示兩個長方形有重疊面積。
## Code
```cpp=
#include <iostream>
using namespace std;
int min(int a, int b) {
if(a < b) return a;
return b;
}
int max(int a, int b) {
if(a > b) return a;
return b;
}
int area(int x1, int y1, int x2, int y2) {
return (x2 - x1) * (y2 - y1);
}
int main() {
// 第一個長方形的左下和右上角座標
int p1x, p1y, p2x, p2y;
// 第二個長方形的左下和右上角座標
int p3x, p3y, p4x, p4y;
cin >> p1x >> p1y >> p2x >> p2y;
cin >> p3x >> p3y >> p4x >> p4y;
// 計算兩個長方形面積加總
int totalArea = area(p1x, p1y, p2x, p2y) +
area(p3x, p3y, p4x, p4y);
// w 表示重疊面積的寬
int w = min(p2x, p4x) - max(p1x, p3x);
// h 表示重疊面積的高
int h = min(p2y, p4y) - max(p1y, p3y);
// 如果有重疊面積,就將面積總和減去重疊面積
if (w > 0 && h > 0) totalArea -= w * h;
cout << totalArea << endl;
return 0;
}
```