Cod sursa(job #1343728)

Utilizator nnnmmmcioltan alex nnnmmm Data 15 februarie 2015 20:49:00
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
#include<algorithm>
struct drept{long long x,y,x1,y1;};
drept v[3];
drept reuniune(drept a,drept b)
{
 drept r;
 r.x=r.x1=r.y=r.y1=0;
 if(b.x>a.x1 | a.x>b.x1 | a.y>b.y1 | b.y>a.y1)
    return r;
 r.x=std::max(a.x,b.x);
 r.y=std::max(a.y,b.y);
 r.x1=std::min(a.x1,b.x1);
 r.y1=std::min(a.y1,b.y1);
 return r;
}
long long perimetru(drept a)
{
 return (a.x1-a.x)*2+(a.y1-a.y)*2;
}
long long aria(drept a)
{
 return (a.x1-a.x)*(a.y1-a.y);
}
int main()
{
 freopen("reuniune.in","r",stdin);
 freopen("reuniune.out","w",stdout);
 for(long long i=0;i<3;i++)
     scanf("%lld %lld %lld %lld ",&v[i].x,&v[i].y,&v[i].x1,&v[i].y1);
 drept r1,r2,r3,r;
 r1=reuniune(v[0],v[1]);
 r2=reuniune(v[0],v[2]);
 r3=reuniune(v[1],v[2]);
 r=reuniune(r1,v[2]);
 printf("%lld ",aria(v[0])+aria(v[1])+aria(v[2])-aria(r1)-aria(r2)-aria(r3)+aria(r));
 printf("%lld ",perimetru(v[0])+perimetru(v[1])+perimetru(v[2])-perimetru(r1)-perimetru(r2)-perimetru(r3)+perimetru(r));
 return 0;
}