Cod sursa(job #1377081)

Utilizator span7aRazvan span7a Data 5 martie 2015 20:01:15
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
using namespace std;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
struct drept{
    int64_t x1,y1,x2,y2;
    drept(){
        x1=x2=y1=y2=0;
    }
};
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 ( ID( inter, a) || ID(inter , b) )
        return drept();
    return inter;

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

    for(char 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;
}