Cod sursa(job #257231)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 12 februarie 2009 22:33:54
Problema Reuniune Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 2.46 kb
#include <stdio.h>
#include <math.h>

#define INF 0x3f3f3f3f

long long Xa,Ya,Xb,Yb,Xc,Yc,Xd,Yd,Xe,Ye,Xf,Yf;
long long arie;
long long perimetru;
long long maxim1,maxim2,maxim3,maxim4;

int min(int a, int b)
{
    if (a>b) return b;
    return a;
}

int max(int a, int b)
{
    if (a>b) return a;
    return b;
}

int abs(int a)
{
    if (a>=0) return a;
    return -a;
}

   

int main()
{
    freopen("reuniune.in","r",stdin);
    
    scanf("%lld %lld %lld %lld", &Xa, &Ya, &Xb, &Yb); 
    scanf("%lld %lld %lld %lld", &Xc, &Yc, &Xd, &Yd); 
    scanf("%lld %lld %lld %lld", &Xe, &Ye, &Xf, &Yf);
    
    arie=perimetru=0;
    
    
    //aflu aria
    //a
    arie+=abs(Xa-Xb)*abs(Yb-Ya);
    //b
    arie+=abs(Xc-Xd)*abs(Yd-Yc);
    //c
    arie+=abs(Xe-Xf)*abs(Yf-Ye);
    //ab si cd
    maxim1=max(Xa,Xc);
    maxim3=max(Ya,Yc);
    maxim2=min(Xb,Xd);
    maxim4=min(Yb,Yd);
    arie-=abs(maxim1-maxim2)*abs(maxim3-maxim4);
    //ab si ef
    maxim1=max(Xa,Xe);
    maxim3=max(Ya,Ye);
    maxim2=min(Xb,Xf);
    maxim4=min(Yb,Yf);
    arie-=abs(maxim1-maxim2)*abs(maxim3-maxim4);
    //cd si ef
    maxim1=max(Xc,Xe);
    maxim3=max(Yc,Ye);
    maxim2=min(Xd,Xf);
    maxim4=min(Yd,Yf);
    arie-=abs(maxim1-maxim2)*abs(maxim3-maxim4);
    //ab,cd si ef
    maxim1=max(Xa,maxim1);
    maxim3=max(Ya,maxim3);
    maxim2=min(Xb,maxim2);
    maxim4=min(Yb,maxim4);
    arie+=abs(maxim1-maxim2)*abs(maxim3-maxim4);

    
    //aflu perimetrul
    //a
    perimetru+=2*abs(Xa-Xb)+2*abs(Yb-Ya);
    //b 
    perimetru+=2*abs(Xc-Xd)+2*abs(Yd-Yc);
    //c
    perimetru+=2*abs(Xe-Xf)+2*abs(Yf-Ye);
    //ab si cd
    maxim1=max(Xa,Xc);
    maxim3=max(Ya,Yc);
    maxim2=min(Xb,Xd);
    maxim4=min(Yb,Yd);
    perimetru-=2*abs(maxim1-maxim2)+2*abs(maxim3-maxim4);
    //ab si ef
    maxim1=max(Xa,Xe);
    maxim3=max(Ya,Ye);
    maxim2=min(Xb,Xf);
    maxim4=min(Yb,Yf);
    perimetru-=2*abs(maxim1-maxim2)+2*abs(maxim3-maxim4);
    //cd si ef
    maxim1=max(Xc,Xe);
    maxim3=max(Yc,Ye);
    maxim2=min(Xd,Xf);
    maxim4=min(Yd,Yf);
    perimetru-=2*abs(maxim1-maxim2)+2*abs(maxim3-maxim4);
    //ab,cd si ef
    maxim1=max(Xa,maxim1);
    maxim3=max(Ya,maxim3);
    maxim2=min(Xb,maxim2);
    maxim4=min(Yb,maxim4);
    perimetru+=2*abs(maxim1-maxim2)+2*abs(maxim3-maxim4);
    
    freopen("reuniune.out","w",stdout);
    
    printf("%lld ",arie);
    printf("%lld",perimetru);
    
    return 0;
}