Cod sursa(job #1088106)

Utilizator serbanSlincu Serban serban Data 20 ianuarie 2014 10:30:08
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

int x10,y10,x20,y20,x30,y30;
int x11,y11,x21,y21,x31,y31;
struct dreptunghi{
int x0,x1,y1,y0;
};
dreptunghi P[4];

long long auxx0,auxx1,auxy0,auxy1;
long long A,B;
int reuniune(int xx0,int yy0,int xx1,int yy1,int ok)
{
    long long dif,fid;
    dif=xx0-xx1;
    if(dif<0) dif=dif*(-1);
    fid=yy0-yy1;
    if(fid<0) fid=fid*(-1);
    if(dif!=0 && fid!=0)
    {
        if(ok==0)
            B=B+dif*2+fid*2;
        else B=B-dif*2-fid*2;
    }
    else
    {
        if(ok==0)
            B=B+dif+fid;
        else B=B-dif-fid;
    }
    return dif*fid;
}
int intersectie(int i, int j)
{
    if(P[i].x0<P[j].x0)
        auxx0=P[j].x0;
    else auxx0=P[i].x0;
    if(P[i].y0<P[j].y0)
        auxy0=P[j].y0;
    else auxy0=P[i].y0;
    if(P[i].x1<P[j].x1)
        auxx1=P[i].x1;
    else auxx1=P[j].x1;
    if(P[i].y1<P[j].y1)
        auxy1=P[i].y1;
    else auxy1=P[j].y1;
    if(auxx0<auxx1 && auxy0<auxy1)
        return reuniune(auxx0,auxy0,auxx1,auxy1,1);
    else return 0;
}

int main()
{
    int i,j;
    freopen("reuniune.in","r",stdin);
    freopen("reuniune.out","w",stdout);
    cin>>P[1].x0>>P[1].y0>>P[1].x1>>P[1].y1;
    cin>>P[2].x0>>P[2].y0>>P[2].x1>>P[2].y1;
    cin>>P[3].x0>>P[3].y0>>P[3].x1>>P[3].y1;
    for(i=1;i<=3;i++)
    {
        A=A+reuniune(P[i].x0,P[i].y0,P[i].x1,P[i].y1,0);
    }
    //aria fara intersectii
    for(i=1;i<3;i++)
    {
        for(j=i+1;j<=3;j++)
        {
            A=A-intersectie(i,j);
        }
    }
    //aria fara intersectia la 3
    for(i=1;i<=3;i++)
    {
        if(P[i].x0>auxx0)
            auxx0=P[i].x0;
        if(P[i].y0>auxy0)
            auxy0=P[i].y0;
        if(P[i].x1<auxx1)
            auxx1=P[i].x1;
        if(P[i].y1<auxy1)
            auxy1=P[i].y1;
    }
    if(auxx0<auxx1 && auxy0<auxy1)
    {
        A=A+reuniune(auxx0,auxy0,auxx1,auxy1,0);
    }
    cout<<A<<" "<<B;



    cout<<"\n";
    return 0;
}