Cod sursa(job #733089)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 11 aprilie 2012 14:03:09
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("reuniune.in");
ofstream out("reuniune.out");

int x1[4],x2[4],y1[4],y2[4],p[10],q[10],k[10],l[10];

inline int modul(int a)
{
    if(a>0)
        return a;
    return -a;
}


int arie1(int x1,int x2,int y1,int y2)
{
    return modul(x2-x1)*modul(y2-y1);
}

int perimetru1(int x1,int x2,int y1,int y2)
{
    return 2*(modul(x2-x1)+modul(y2-y1));
}


int arie2(int x1,int x2,int y1,int y2,int a1,int a2,int b1,int b2)
{
    if(x2<=a1 || y2<=b1 || a2<=x1 || b2<=y1)
        return 0;
    p[1]=a1;
    p[2]=a2;
    p[3]=x1;
    p[4]=x2;
    sort(p+1,p+5);
    q[1]=b1;
    q[2]=b2;
    q[3]=y1;
    q[4]=y2;
    sort(q+1,q+5);
    return arie1(p[2],p[3],q[2],q[3]);
}


int perimetru2(int x1,int x2,int y1,int y2,int a1,int a2,int b1,int b2)
{
    if(x2<=a1 || y2<=b1 || a2<=x1 || b2<=y1)
        return 0;
    p[1]=a1;
    p[2]=a2;
    p[3]=x1;
    p[4]=x2;
    sort(p+1,p+5);
    q[1]=b1;
    q[2]=b2;
    q[3]=y1;
    q[4]=y2;
    sort(q+1,q+5);
    return perimetru1(p[2],p[3],q[2],q[3]);
}


int arie3(int x1,int x2,int y1,int y2,int a1,int a2,int b1,int b2,int m1,int m2,int n1,int n2)
{
    int p1,p2,q1,q2;
    if(x2<=a1 || y2<=b1 || a2<=x1 || b2<=y1)
        return 0;
    p[1]=a1;
    p[2]=a2;
    p[3]=x1;
    p[4]=x2;
    sort(p+1,p+5);
    q[1]=b1;
    q[2]=b2;
    q[3]=y1;
    q[4]=y2;
    sort(q+1,q+5);
    k[1]=p[2];
    k[2]=p[3];
    l[1]=q[2];
    l[2]=q[3];
    if(k[2]<=m1 || l[2]<=n1 || m2<=k[1] || n2<=l[1])
        return 0;
    p[1]=k[1];
    p[2]=k[2];
    p[3]=m1;
    p[4]=m2;
    sort(p+1,p+5);
    q[1]=l[1];
    q[2]=l[2];
    q[3]=n1;
    q[4]=n2;
    sort(q+1,q+5);
    return arie1(p[2],p[3],q[2],q[3]);
}

int perimetru3(int x1,int x2,int y1,int y2,int a1,int a2,int b1,int b2,int m1,int m2,int n1,int n2)
{
    int p1,p2,q1,q2;
    if(x2<=a1 || y2<=b1 || a2<=x1 || b2<=y1)
        return 0;
    p[1]=a1;
    p[2]=a2;
    p[3]=x1;
    p[4]=x2;
    sort(p+1,p+5);
    q[1]=b1;
    q[2]=b2;
    q[3]=y1;
    q[4]=y2;
    sort(q+1,q+5);
    k[1]=p[2];
    k[2]=p[3];
    l[1]=q[2];
    l[2]=q[3];
    if(k[2]<=m1 || l[2]<=n1 || m2<=k[1] || n2<=l[1])
        return 0;
    p[1]=k[1];
    p[2]=k[2];
    p[3]=m1;
    p[4]=m2;
    sort(p+1,p+5);
    q[1]=l[1];
    q[2]=l[2];
    q[3]=n1;
    q[4]=n2;
    sort(q+1,q+5);
    return perimetru1(p[2],p[3],q[2],q[3]);
}


int main()
{
    int s=0,p=0;
    in>>x1[1]>>y1[1]>>x2[1]>>y2[1];
    in>>x1[2]>>y1[2]>>x2[2]>>y2[2];
    in>>x1[3]>>y1[3]>>x2[3]>>y2[3];
    s=arie1(x1[1],x2[1],y1[1],y2[1]);
    s+=arie1(x1[2],x2[2],y1[2],y2[2]);
    s+=arie1(x1[3],x2[3],y1[3],y2[3]);
    s-=arie2(x1[1],x2[1],y1[1],y2[1],x1[3],x2[3],y1[3],y2[3]);
    s-=arie2(x1[1],x2[1],y1[1],y2[1],x1[2],x2[2],y1[2],y2[2]);
    s-=arie2(x1[2],x2[2],y1[2],y2[2],x1[3],x2[3],y1[3],y2[3]);
    s+=arie3(x1[1],x2[1],y1[1],y2[1],x1[2],x2[2],y1[2],y2[2],x1[3],x2[3],y1[3],y2[3]);
    out<<s<<" ";
    p=0;
    p=perimetru1(x1[1],x2[1],y1[1],y2[1]);
    p+=perimetru1(x1[2],x2[2],y1[2],y2[2]);
    p+=perimetru1(x1[3],x2[3],y1[3],y2[3]);
    p-=perimetru2(x1[1],x2[1],y1[1],y2[1],x1[3],x2[3],y1[3],y2[3]);
    p-=perimetru2(x1[1],x2[1],y1[1],y2[1],x1[2],x2[2],y1[2],y2[2]);
    p-=perimetru2(x1[2],x2[2],y1[2],y2[2],x1[3],x2[3],y1[3],y2[3]);
    p+=perimetru3(x1[1],x2[1],y1[1],y2[1],x1[2],x2[2],y1[2],y2[2],x1[3],x2[3],y1[3],y2[3]);
    out<<p<<"\n";
    return 0;
}