Cod sursa(job #863691)

Utilizator stoicatheoFlirk Navok stoicatheo Data 23 ianuarie 2013 23:08:58
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include<cstring>
 
using namespace std;
 
struct punct
{
    int x,y;
};
 
struct dr
{
    punct a,b,c,d;
} d1,d2,d3,d4,d5,d6,d7;
 
dr intersectie(dr k,dr l)
{
    dr inters;
 
    inters.a.x=max(k.a.x,l.a.x);
    inters.d.x=inters.a.x;
 
    inters.b.x=min(k.b.x,l.b.x);
    inters.c.x=inters.b.x;
 
    inters.a.y=max(k.a.y,l.a.y);
    inters.b.y=inters.a.y;
 
    inters.c.y=min(k.c.y,l.c.y);
    inters.d.y=inters.c.y;
 
    if(inters.a.x>inters.c.x||inters.a.y>inters.c.y)
    {
        inters.a.x=0;
        inters.a.y=0;
        inters.b.x=0;
        inters.b.y=0;
        inters.c.x=0;
        inters.c.y=0;
        inters.d.x=0;
        inters.d.y=0;
    }
 
    return inters;
}
 
long long arie(dr d)
{
    long long l,L;
    l=abs((long long)d.d.y-d.a.y);
    L=abs((long long)d.b.x-d.a.x);
    return L*l;
}
 
long long per(dr d)
{
 
    long long l,L;
    l=abs((long long)d.d.y-d.a.y);
    L=abs((long long)d.b.x-d.a.x);
    return (L+l)*2;
}
 
int main()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
 
    scanf("%d%d%d%d",&d1.a.x,&d1.a.y,&d1.c.x,&d1.c.y);
    d1.d.x=d1.a.x;
    d1.d.y=d1.c.y;
    d1.b.x=d1.c.x;
    d1.b.y=d1.a.y;
 
    scanf("%d%d%d%d",&d2.a.x,&d2.a.y,&d2.c.x,&d2.c.y);
    d2.d.x=d2.a.x;
    d2.d.y=d2.c.y;
    d2.b.x=d2.c.x;
    d2.b.y=d2.a.y;
 
    scanf("%d%d%d%d",&d3.a.x,&d3.a.y,&d3.c.x,&d3.c.y);
    d3.d.x=d3.a.x;
    d3.d.y=d3.c.y;
    d3.b.x=d3.c.x;
    d3.b.y=d3.a.y;
 
    d4=intersectie(d1,d2);
    d5=intersectie(d2,d3);
    d6=intersectie(d1,d3);
 
    d7=intersectie(d4,d5);
    d7=intersectie(d7,d6);
 
 
    long long A=arie(d1)+arie(d2)+arie(d3)-arie(d4)-arie(d5)-arie(d6)+arie(d7);
    long long P=per(d1)+per(d2)+per(d3)-per(d4)-per(d5)-per(d6)+per(d7);
    printf("%lld ",A);
    printf("%lld ",P);
    return 0;
}