两个矩形的面积并

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

首先:给定四个点确定了两个矩形,如果两个矩形不相交,那么一定是有序排列的,要么一列要么一排,也就是说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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值