Cod sursa(job #1723993)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 1 iulie 2016 23:42:23
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct Rectangle{
    long long l1,c1;
    long long l2,c2;
};
Rectangle x,y,z,xy,xz,yz,xyz;
void Intersect(Rectangle a,Rectangle b,Rectangle &c){
    c.l1=max(a.l1,b.l1);
    c.c1=max(a.c1,b.c1);
    c.l2=min(a.l2,b.l2);
    c.c2=min(a.c2,b.c2);
    if(c.l1>c.l2||c.c1>c.c2)
        c.l1=c.c1=c.l2=c.c2=0;
}
long long Area(Rectangle a){
    return (a.l2-a.l1)*(a.c2-a.c1);
}
long long Perimeter(Rectangle a){
    return 2*(a.l2-a.l1+a.c2-a.c1);
}
int main(){
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    long long UnionArea,UnionPerimeter;
    scanf("%lld%lld%lld%lld",&x.l1,&x.c1,&x.l2,&x.c2);
    scanf("%lld%lld%lld%lld",&y.l1,&y.c1,&y.l2,&y.c2);
    scanf("%lld%lld%lld%lld",&z.l1,&z.c1,&z.l2,&z.c2);
    Intersect(x,y,xy);
    Intersect(x,z,xz);
    Intersect(y,z,yz);
    Intersect(x,yz,xyz);
    UnionArea=Area(x)+Area(y)+Area(z)-Area(xy)-Area(xz)-Area(yz)+Area(xyz);
    UnionPerimeter=Perimeter(x)+Perimeter(y)+Perimeter(z)-Perimeter(xy)-Perimeter(xz)-Perimeter(yz)+Perimeter(xyz);
    printf("%lld %lld",UnionArea,UnionPerimeter);
    return 0;
}