[vijos 1056] 图形面积

题目

描述
桌面上放了N个平行于坐标轴的矩形,这N个矩形可能有互相覆盖的部分,求它们组成的图形的面积。
格式
输入格式
输入第一行为一个数N(1≤N≤100),表示矩形的数量。下面N行,每行四个整数,分别表示每个矩形的左下角和右上角的坐标,坐标范围为–10^8到10^8之间的整数。
输出格式
输出只有一行,一个整数,表示图形的面积。
样例1
样例输入1
3
1 1 4 3
2 -1 3 2
4 0 5 2
Copy
样例输出1
10


解题思路

这里写图片描述


代码

#include<cstdio>
#include<algorithm>
#include<iostream>
#define xh(i,a,b) for (int i=a;i<=b;i++)
using namespace std; 
const int maxn=201;
long long rect[maxn][5],x[maxn*2],y[maxn*2]; 
int n; long long ans;
int main()
{
    scanf("%d",&n);
    xh(i,1,n)
    {
        long long x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        if (x1==x2||y1==y2) continue;
        rect[i][1]=x1; rect[i][2]=y1;
        rect[i][3]=x2; rect[i][4]=y2;
        x[2*i-1]=x1; x[2*i]=x2;
        y[2*i-1]=y1; y[2*i]=y2;
    }
    sort(x+1,x+2*n+1); 
    sort(y+1,y+2*n+1); 
    xh(i,1,2*n)
     xh(j,1,2*n)
      xh(k,1,n)
      if (x[i]>rect[k][1]&&x[i]<=rect[k][3]&&y[j]>rect[k][2]&&y[j]<=rect[k][4])
      { ans+=(x[i]-x[i-1])*(y[j]-y[j-1]); break; }    
    cout<<ans; 
}

猜你喜欢

转载自blog.csdn.net/qq_39897867/article/details/80024368
今日推荐