题目描述
给两个边平行于坐标轴的矩形,求两个矩形的面积并。
输入
存在多个样例,每个样例包括2行,每行是一个矩形,为矩形一个对角线端点的坐标x1,y1,x2,y2,0≤x1,y1,x2,y2≤1000。
输出
每行输出一个样例的结果。
样例输入
0 0 1 1 0 0 2 1 0 0 2 2 1 1 3 3 0 0 1 1 2 2 3 3 0 0 2 1 1 1 2 2
样例输出
2 7 2 3
思路:其实这题目的话,我建议大家去网上找找“如何判断矩阵相交”,就会有最简单的相交方法,另外以后我觉得有意思的题解我都是用c++写了。
比如图上这俩矩阵,相交矩阵的左下角x坐标就是俩矩阵左下角坐标x的最大值,左下角y坐标也是俩矩阵左下角坐标y的最大值,相交矩阵右上角的x坐标就是俩矩阵右上角坐标x的最小值,y同理。不想交的话x,y满足的条件读者可以通过我的代码自行推导。
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int x0,y0,x1,y1,x2,y2,x3,y3;
while(scanf("%d%d%d%d",&x0,&y0,&x1,&y1)!=EOF&&scanf("%d%d%d%d",&x2,&y2,&x3,&y3)!=EOF){
int x4=max(min(x0,x1),min(x2,x3));//用min分出俩矩阵左下角的x再求最大
int y4=max(min(y0,y1),min(y2,y3));
int x5=min(max(x0,x1),max(x2,x3));//用max分出俩矩阵右下角的x再求最大
int y5=min(max(y0,y1),max(y2,y3));
int s1=abs(x1-x0)*abs(y1-y0);
int s2=abs(x3-x2)*abs(y3-y2);
int s3=abs(x5-x4)*abs(y5-y4);
if(x5<x4||y4>y5){//不相交的条件
s3=0;
}
int res=s1+s2-s3;
cout<<res<<endl;
}
return 0;
}