Cod sursa(job #964422)

Utilizator andreimaresuMaresu Andrei andreimaresu Data 20 iunie 2013 22:12:22
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

long long int arie2(long long int x1,long long int y1,long long int x2,long long int y2,long long int x3,long long int y3,long long int x4,long long int y4)
{
    long long int a1,b1,a2,b2;
    a1=max(x1,x3);
    b1=max(y1,y3);
    a2=min(x2,x4);
    b2=min(y2,y4);
    if(a2>=a1 && b2>=b1)
    {
        return (a2-a1)*(b2-b1);
    }
    else
    {
        return 0;
    }
}
long long int arie3(long long int x1,long long int y1,long long int x2,long long int y2,long long int x3,long long int y3,long long int x4,long long int y4,
                    long long int x5,long long int y5,long long int x6,long long int y6)
{
    long long int a1,b1,a2,b2;
    a1=max(max(x1,x3),x5);
    b1=max(max(y1,y3),y5);
    a2=min(min(x2,x4),x6);
    b2=min(min(y2,y4),y6);
    if(a2>=a1 && b2>=b1)
    {
        return (a2-a1)*(b2-b1);
    }
    else
    {
        return 0;
    }
}

long long int perimetru2(long long int x1,long long int y1,long long int x2,long long int y2,long long int x3,long long int y3,long long int x4,long long int y4)
{
    long long int a1,b1,a2,b2;
    a1=max(x1,x3);
    b1=max(y1,y3);
    a2=min(x2,x4);
    b2=min(y2,y4);
    if(a2>=a1 && b2>=b1)
    {
        return 2*((a2-a1)+(b2-b1));
    }
    else
    {
        return 0;
    }
}
long long int perimetru3(long long int x1,long long int y1,long long int x2,long long int y2,long long int x3,long long int y3,long long int x4,long long int y4,
                    long long int x5,long long int y5,long long int x6,long long int y6)
{
    long long int a1,b1,a2,b2;
    a1=max(max(x1,x3),x5);
    b1=max(max(y1,y3),y5);
    a2=min(min(x2,x4),x6);
    b2=min(min(y2,y4),y6);
    if(a2>=a1 && b2>=b1)
    {
        return 2*((a2-a1)+(b2-b1));
    }
    else
    {
        return 0;
    }
}

int main()
{
    FILE *in=fopen("reuniune.in","r");
    FILE *out=fopen("reuniune.out","w");
    long long int x[7],y[7],arie,perimetru;
    for(int i=1;i<=6;i++)
    {
    fscanf(in,"%lld %lld",&x[i],&y[i]);
    }
    arie=(x[2]-x[1])*(y[2]-y[1])+(x[4]-x[3])*(y[4]-y[3])+(x[6]-x[5])*(y[6]-y[5])-arie2(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4])
    -arie2(x[1],y[1],x[2],y[2],x[5],y[5],x[6],y[6])-arie2(x[5],y[5],x[6],y[6],x[3],y[3],x[4],y[4])+arie3(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4],x[5],y[5],x[6],y[6]);
     perimetru=2*((x[2]-x[1])+(y[2]-y[1])+(x[4]-x[3])+(y[4]-y[3])+(x[6]-x[5])+(y[6]-y[5]))
     -perimetru2(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4])
    -perimetru2(x[1],y[1],x[2],y[2],x[5],y[5],x[6],y[6])-perimetru2(x[5],y[5],x[6],y[6],x[3],y[3],x[4],y[4])+perimetru3(x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4],x[5],y[5],x[6],y[6]);
    fprintf(out,"%lld %lld",arie,perimetru);
    return 0;
}