Cod sursa(job #1668099)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 29 martie 2016 15:54:08
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
using namespace std;
struct pct{
    long long x,y;
    pct(int a=0, int b=0){x=a,y=b;}
};
struct dreptunghi{
    pct a,b;
    long long p(){
        return ((b.x-a.x)+(b.y-a.y))*2;
    }
    long long ar(){
        return (b.x-a.x)*(b.y-a.y);
    }
    dreptunghi (pct x, pct y){a=x,b=y;}
    bool valid(){
        if(a.x<=b.x&&a.y<=b.y)return true;
        return false;
    }
    dreptunghi inters(dreptunghi d){
        return dreptunghi(pct(max(a.x,d.a.x),max(a.y,d.a.y)),pct(min(b.x,d.b.x),min(b.y,d.b.y)));
    }
};
long long x0,y0,x1,y1,ar,p;
bool ok12,ok13,ok23,ok123;
ifstream f("reuniune.in");
ofstream g("reuniune.out");
int main()
{
    f>>x0>>y0>>x1>>y1;
    dreptunghi d1(pct(x0,y0),pct(x1,y1));
    f>>x0>>y0>>x1>>y1;
    dreptunghi d2(pct(x0,y0),pct(x1,y1));
    f>>x0>>y0>>x1>>y1;
    dreptunghi d3(pct(x0,y0),pct(x1,y1));

    dreptunghi d12=d1.inters(d2);
    ok12=d12.valid();
    dreptunghi d13=d1.inters(d3);
    ok13=d13.valid();
    dreptunghi d23=d3.inters(d2);
    ok23=d23.valid();
    dreptunghi d123=d12.inters(d3);
    if(ok12)ok123=d123.valid();

    ar=d1.ar()+d2.ar()+d3.ar();
    if(ok12)ar-=d12.ar();
    if(ok13)ar-=d13.ar();
    if(ok23)ar-=d23.ar();
    if(ok123)ar+=d123.ar();

    p=d1.p()+d2.p()+d3.p();
    if(ok12)p-=d12.p();
    if(ok13)p-=d13.p();
    if(ok23)p-=d23.p();
    if(ok123)p+=d123.p();

    g<<ar<<" "<<p;
    return 0;
}