矩形相交的面积

矩形相交的面积

■ 题目描述

  • 给出3组点坐标(x, y, w, h),-1000 < x, y < 1000,w,h为正整数。
  • (x, y, w, h)表示平面直角坐标系中的一个矩形:
  • x, y为矩形左上角坐标点,w, h,向右w,向下h。
  • (x, y, w, h)表示 x 轴 (x, x+w) 和 y 轴 (y, y-h) 围成的矩形区域
  • (0, 0, 2, 2)表示 x 轴 (0, 2) 和 y 轴 (0, -2) 围成的矩形区域
  • (3, 5, 4, 6)表示 x 轴 (3, 7) 和 y 轴 (5, -1) 围成的矩形区域
  • 求3组坐标构成的矩形区域重合部分的面积。

输入描述:

  • 3行输入分别为3个矩形的位置,分别代表“左上角x坐标”,“左上角y坐标”,“矩形宽w”,“矩形高h”
  • 参数限制如下:1000 <= x,y < 1000

输出描述:

  • 输出 3 个矩形相交的面积,不相交的输出 0。

示例 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

1 6 4 4

3 5 3 4

0 3 7 3

输出

2

思路:

画图了解即可,具体可看之前写过的矩形面积并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

int main(){
int x[4], y[4], w[4], h[4];
for(int i = 0; i < 3; i++){
cin >> x[i] >> y[i] >> w[i] >> h[i];
}
int left = max(x[0],max(x[1],x[2]));
int right = min(x[0] + w[0], min(x[1] + w[1], x[2] + w[2]));
int up = min(y[0],min(y[1], y[2]));
int down = max(y[0] - h[0], max(y[1] - h[1], y[2] - h[2]));

int res = 0;
if(right - left < 0 || up - down < 0) res = 0;
else res = (right - left) * (up - down);
cout << res << endl;
return 0;
}