Cod sursa(job #733090)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 11 aprilie 2012 14:04:32
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.84 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

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

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


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

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


long long arie2(long long x1,long long x2,long long y1,long long y2,long long a1,long long a2,long long b1,long long 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]);
}


long long perimetru2(long long x1,long long x2,long long y1,long long y2,long long a1,long long a2,long long b1,long long 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]);
}


long long arie3(long long x1,long long x2,long long y1,long long y2,long long a1,long long a2,long long b1,long long b2,long long m1,long long m2,long long n1,long long n2)
{
    long long 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]);
}

long long perimetru3(long long x1,long long x2,long long y1,long long y2,long long a1,long long a2,long long b1,long long b2,long long m1,long long m2,long long n1,long long n2)
{
    long long 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()
{
    long long 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;
}