两个矩形的面积并

今天队友给我提供了一个很好的思路,一起分享一下

首先:给定四个点确定了两个矩形,如果两个矩形不相交,那么一定是有序排列的,要么一列要么一排,也就是说x或y的坐标有一个是线性有序排列,这种情况面积并就是两个面积的和

其次:如果相交,先求面积和,减去相交面积,相交的两个点一定在四个点有序排列中的中间两个,由此就知道相交以后的矩形表示了

贴一个题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	int t;
	cin >> t;
	for(int i = 0; i < t; i++){
		ll x[4], y[4];
		scanf("%lld %lld %lld %lld %lld %lld %lld %lld", &x[0], &y[0], &x[1], &y[1], &x[2], &y[2], &x[3], &y[3]);
		ll k = (y[2] - y[3]) * (x[3] - x[2]) + (y[0]-y[1]) * (x[1] - x[0]);
		if(x[1] <= x[2] || x[0] >= x[3] || y[1] >= y[2] || y[0] <= y[3]){
			printf("%lld\n", k);
		}
		else {
			sort(x, x+4);
			sort(y, y+4);
			printf("%lld\n", k - (x[2] - x[1]) * (y[2] - y[1]));
		}
	}
	return 0;
}
发布了143 篇原创文章 · 获赞 11 · 访问量 8211

猜你喜欢

转载自blog.csdn.net/weixin_43701790/article/details/103229788