题目描述
数学老师画了两个长方形,如下图所示,长方形的边均平行于X轴、Y轴,长方形的四个顶点坐标均为整数且在0到1000之间,给出每个长方形的左下角坐标和右上角坐标,请你编一程序,求出两个长方形重叠部分的面积。
思路
先离散后求出整个图像的面积,然后用两个矩形的面积减去它就是答案
#include <stdio.h>
#include <algorithm>
using namespace std;
struct arr
{
int x1,x2,y1,y2;
}a[1000];
int cam(int x,int y)
{
return x<y;
}
int dx[1000],dy[1000],f[1000];
int main()
{
int n,ll=0;
ll++;
n=2;
int t=0;
for (int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
t++;
dx[t]=a[i].x1; dy[t]=a[i].y1;
t++;
dx[t]=a[i].x2; dy[t]=a[i].y2;
}
sort(dx+1,dx+t+1,cam);
sort(dy+1,dy+t+1,cam);
int ans=0;
for (int i=1;i<=t-1;i++)
{
int x1=dx[i],l=0,r=0;
for (int j=1;j<=t-1;j++)
{
int y1=dy[j],x2=dx[i+1],y2=dy[j+1];
if (x2==x1||y1==y2) continue;
for (int k=1;k<=n;k++)
{
if (a[k].x1<=x1&&a[k].y1<=y1&&a[k].x2>x1&&a[k].y2>y1)
{
ans+=(x2-x1)*(y2-y1);
break;
}
}
}
}
int x=(a[1].x2-a[1].x1)*(a[1].y2-a[1].y1),y=(a[2].x2-a[2].x1)*(a[2].y2-a[2].y1);
ans=x+y-ans;
printf("%d\n",ans);
}
Comments NOTHING