51Nod2488 矩形并的面积

Problem

在二维平面上,给定两个矩形,满足矩形的每条边分别和坐标轴平行,求这个两个矩形的并的面积。即它们重叠在一起之后的总的面积。

Solution

这方法真神奇。。。

Code

#include<cstdio>
#include<iostream>
#include<algorithm>
#include <iomanip>
#include<map>
#define io_opt ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long
const int MAXN=100020;
using namespace std;
struct Point{
    int x,y;
};
Point p[10];
int iabs(int s){
    return s>0?s:-s;
}
bool tog(Point p1,Point p2,Point p3,Point p4){
    return (p1.x<=p3.x&&p1.y<=p3.y&&p2.x>=p4.x&&p2.y>=p4.y)||(p1.x>=p3.x&&p1.y>=p3.y&&p2.x<=p4.x&&p2.y<=p4.y);
}
int main(){
    io_opt;
    for(int i=1;i<=4;i++){
        cin>>p[i].x>>p[i].y;
    }
    int s1=(p[2].x-p[1].x)*(p[2].y-p[1].y),s2=(p[4].x-p[3].x)*(p[4].y-p[3].y);
    if(tog(p[1],p[2],p[3],p[4])){
        cout<<max(s1,s2);
        return 0;
    }
    ll s=s1;s+=s2;
    int a1=max(p[1].x,p[1].y);
    int b1=max(p[1].y,p[3].y);
    int a2=min(p[2].x,p[4].x);
    int b2=min(p[2].y,p[4].y);
    if(a1<a2&&b1<b2){
        cout<<s-(a2-a1)*(b2-b1)<<endl;
    }
    else{
        cout<<s<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/sz-wcc/p/11488791.html