Cod sursa(job #1324291)

Utilizator LegionHagiu Stefan Legion Data 22 ianuarie 2015 03:10:34
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.67 kb
#include <iostream>
#include <fstream>
using namespace std;
long long ax[4],ay[4],bx[4],by[4],areuniunea,preuniunea,i;
long long axb,ayb,bxb,byb;
long long reuniunea1(long long a)
{
    axb=max(ax[1],ax[2]);
    ayb=max(ay[1],ay[2]);
    bxb=min(bx[1],bx[2]);
    byb=min(by[1],by[2]);
    if (a==1)
    {
        if ((bxb-axb)*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return(bxb-axb)*(byb-ayb);
    }
    else
    {
        if (2*(bxb-axb)+2*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return (2*(bxb-axb)+2*(byb-ayb));
    }
}
long long reuniuneainplus(long long a)
{
    axb=max(ax[3],ax[1]);
    ayb=max(ay[3],ay[1]);
    bxb=min(bx[3],bx[1]);
    byb=min(by[3],by[1]);
    if (a==1)
    {
        if ((bxb-axb)*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return(bxb-axb)*(byb-ayb);
    }
    else
    {
        if (2*(bxb-axb)+2*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return (2*(bxb-axb)+2*(byb-ayb));
    }
}
long long reuniunea2(long long a)
{
    axb=max(ax[3],ax[2]);
    ayb=max(ay[3],ay[2]);
    bxb=min(bx[3],bx[2]);
    byb=min(by[3],by[2]);
    if (a==1)
    {
        if ((bxb-axb)*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return(bxb-axb)*(byb-ayb);
    }
    else
    {
        if (2*(bxb-axb)+2*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return (2*(bxb-axb)+2*(byb-ayb));
    }
}
long long reuniuneatotala(long long a)
{
    axb=max(ax[1],axb);
    ayb=max(ay[1],ayb);
    bxb=min(bx[1],bxb);
    byb=min(by[1],byb);
    if (a==1)
    {
        if ((bxb-axb)*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return(bxb-axb)*(byb-ayb);
    }
    else
    {
        if (2*(bxb-axb)+2*(byb-ayb)<0)
        {
            return 0;
        }
        else
        return (2*(bxb-axb)+2*(byb-ayb));
    }
}
int main()
{
    ifstream in("reuniune.in");
    ofstream out("reuniune.out");
    for (i=1;i<=3;i++)
    {
        in>>ax[i];
        in>>ay[i];
        in>>bx[i];
        in>>by[i];
        if (ax[i]>bx[i])
        {
            swap(ax[i],bx[i]);
            swap(ay[i],by[i]);
        }
    }
    out<<1LL*((bx[1]-ax[1])*(by[1]-ay[1])+(bx[2]-ax[2])*(by[2]-ay[2])+(bx[3]-ax[3])*(by[3]-ay[3])-reuniunea1(1)-reuniuneainplus(1)-reuniunea2(1)+reuniuneatotala(1));
    out<<" ";
    out<<1LL*(2*(bx[1]-ax[1])+2*(by[1]-ay[1])+2*(bx[2]-ax[2])+2*(by[2]-ay[2])+2*(bx[3]-ax[3])+2*(by[3]-ay[3])-reuniunea1(2)-reuniuneainplus(2)-reuniunea2(2)+reuniuneatotala(2));
}