Cod sursa(job #1434729)

Utilizator mihai9913Blaga Mihai mihai9913 Data 11 mai 2015 11:35:49
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("reuniune.in"); ofstream g("reuniune.out");
struct drept{int x1; int y1; int x2; int y2;};
drept d[4];
void citire()
{
    for(int i=1;i<=3;i++) f>>d[i].x1>>d[i].y1>>d[i].x2>>d[i].y2;
}
drept intersectie(drept a, drept b)
{   drept d;
    d.x1=max(a.x1, b.x1);
    d.y1=max(a.y1, b.y1);
    d.x2=min(a.x2, b.x2);
    d.y2=min(a.y2, b.y2);
    if(d.x2<d.x1 || d.y2<d.y1)   d.x1=d.x2=d.y1=d.y2=0;
    return d;
}
long long arie(drept a)
{
    return 1LL*(a.x2-a.x1)*(a.y2-a.y1);
}
long long perimetru(drept a)
{
    return 2LL*((a.x2-a.x1)+(a.y2-a.y1));
}
int main()
{
    citire();
    long long a=0, p=0;
    a=arie(d[1])+arie(d[2])+arie(d[3])-arie(intersectie(d[1], d[2]));
    a-=arie(intersectie(d[1], d[3]))+arie(intersectie(d[2], d[3]));
    a+=arie(intersectie(d[1], intersectie(d[2], d[3])));
    p=perimetru(d[1])+perimetru(d[2])+perimetru(d[3])-perimetru(intersectie(d[1], d[2]));
    p-=perimetru(intersectie(d[1], d[3]))+perimetru(intersectie(d[2], d[3]));
    p+=perimetru(intersectie(d[1], intersectie(d[2], d[3])));
    g<<a<<" "<<p<<'\n';
    g.close();
    return 0;
}