矩形相交的面积
■ 题目描述
- 给出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
输出描述:
示例
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
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; }
|