Cod sursa(job #2653831)

Utilizator enedumitruene dumitru enedumitru Data 29 septembrie 2020 11:27:56
Problema Reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
using namespace std;
ifstream f("reuniune.in"); ofstream g("reuniune.out");
typedef long long ll;
struct drept {int x0,y0,x1,y1;} d[4];
ll car(drept p)
{   return 1LL*(p.x1-p.x0)*(p.y1-p.y0);}
ll cper(drept p)
{   return 2LL*(p.x1-p.x0+p.y1-p.y0);}
drept iter(drept a, drept b)
{   drept c;
    c.x0=max(a.x0,b.x0);
    c.y0=max(a.y0,b.y0);
    c.x1=min(a.x1,b.x1);
    c.y1=min(a.y1,b.y1);
    if(c.x0>c.x1 || c.y0>c.y1) return d[0];
    return c;
}
int main()
{   for(int i=1;i<=3;i++) f>>d[i].x0>>d[i].y0>>d[i].x1>>d[i].y1;
    ll arie=car(d[1])+car(d[2])+car(d[3])-car(iter(d[1],d[2]))-car(iter(d[1],d[3]))-car(iter(d[3],d[2]))
    +car(iter(iter(d[1],d[2]),d[3]));
    ll perimetru=cper(d[1])+cper(d[2])+cper(d[3])-cper(iter(d[1],d[2]))-cper(iter(d[1],d[3]))-cper(iter(d[3],d[2]))
    +cper(iter(iter(d[1],d[2]),d[3]));
    g<<arie<<' '<<perimetru; g.close(); return 0;
}