Cod sursa(job #379852)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 4 ianuarie 2010 11:14:01
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<stdio.h>
struct punct
{
    long long x,y;
};
struct dreptunghi
{
    punct ss,dj;
} a[4],drpt12,drpt23,drpt13,drpt123;
long long max (long long a,long long b)
{
    if(a<b)
        return b;
    return a;
}
long long min (long long a,long long b)
{
    if(a>b)
        return b;
    return a;
}
int intersect (dreptunghi r1,dreptunghi r2)
{
    return r1.dj.x>=r2.ss.x && r1.ss.x<=r2.dj.x && r1.dj.y<=r2.ss.y && r1.ss.y>=r2.dj.y; 
}
punct stanga_sus (dreptunghi r1,dreptunghi r2)
{
    punct A;
    A.x=intersect(r1,r2)*max(r1.ss.x,r2.ss.x);
    A.y=intersect(r1,r2)*min(r1.ss.y,r2.ss.y);
    return A;
}
punct dreapta_jos (dreptunghi r1,dreptunghi r2)
{
    punct A;
    A.x=intersect(r1,r2)*min(r1.dj.x,r2.dj.x);
    A.y=intersect(r1,r2)*max(r1.dj.y,r2.dj.y);
    return A;
}
long long Aria (dreptunghi A)
{
    return (A.ss.x-A.dj.x)*(A.ss.y-A.dj.y);
}
long long  perim (dreptunghi A)
{
    return 2*(A.ss.x-A.dj.x+A.ss.y-A.dj.y);
}
int main ()
{
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    for(int i=1;i<=3;++i)
        scanf("%lld%lld%lld%lld",&a[i].ss.x,&a[i].dj.y,&a[i].dj.x,&a[i].ss.y);
    drpt12.ss=stanga_sus(a[1],a[2]);
    drpt12.dj=dreapta_jos(a[1],a[2]);
    
    drpt23.ss=stanga_sus(a[2],a[3]);
    drpt23.dj=dreapta_jos(a[2],a[3]);
    
    drpt13.ss=stanga_sus(a[1],a[3]);
    drpt13.dj=dreapta_jos(a[1],a[3]);
    
    drpt123.ss=stanga_sus(a[1],drpt23);
    drpt123.dj=dreapta_jos(a[1],drpt23);
    
    printf("%lld %lld",Aria(a[1])+Aria(a[2])+Aria(a[3])-Aria(drpt12)-Aria(drpt23)-Aria(drpt13)+Aria(drpt123),perim(a[1])+perim(a[2])+perim(a[3])-perim(drpt12)-perim(drpt23)-perim(drpt13)+perim(drpt123));
    return 0;
}