Cod sursa(job #1377154)

Utilizator span7aRazvan span7a Data 5 martie 2015 20:24:52
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
struct drept{
    int64_t x1,y1,x2,y2;
};
drept v[4];
uint64_t Aria_reuniune, Perimetru_reuniune;
bool ID( drept a,drept b)
{
    if(a.x1 == b.x1 && a.x2 == b.x2 && a.y1 == b.y1 && a.y2 == b.y2 )
        return true;
    return false;
}
drept intersectia ( drept a, drept b)
{
    drept inter;
    inter.x1= max ( a.x1 , b.x1 );
    inter.y1= min ( a.y1 , b.y1 );
    inter.x2= min ( a.x2 , b.x2 );
    inter.y2= max ( a.y2 , b.y2 );
    if ( inter.x1 > inter.x2 || inter.y1 < inter.y2 ) // daca nu se intersecteaza
       {
           inter.x1=inter.x2=inter.y1=inter.y2=0;
           return inter;
       }
    return inter;

}
uint64_t Ar(drept a)
{
     return (a.x2-a.x1)*(a.y1-a.y2);

}
uint64_t Pe(drept a)
{
    return 2 * ( ( a.x2 - a.x1 ) + (a.y1 - a.y2) ) ;
}
int main()
{
    drept I1,I2,I3,I4;

    for(int i=1;i<=3;i++)
        f>>v[i].x1>>v[i].y2>>v[i].x2>>v[i].y1;

    I1 = intersectia ( v[1], v[2] );
    I2 = intersectia ( v[2], v[3] );
    I3 = intersectia ( v[1], v[3] );
    I4 = intersectia ( I3, v[2]);

    Aria_reuniune = Ar(v[1])+Ar(v[2])+Ar(v[3])-Ar(I1)-Ar(I2)-Ar(I3)+Ar(I4);
    Perimetru_reuniune = Pe(v[1])+Pe(v[2])+Pe(v[3])-Pe(I1)-Pe(I2)-Pe(I3)+Pe(I4);

    g<<Aria_reuniune<<" "<<Perimetru_reuniune;
    return 0;
}