Cod sursa(job #648427)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 13 decembrie 2011 14:42:36
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<cstdio>
#define ll long long
typedef struct E
{ll x,y;};
typedef struct D
{E c,d;}D;
int i;
ll A,P;
E a[4],b[4];
D r[4],w1,w2,w3,w4;

ll min(ll x,ll y)
{return x<y?x:y;}

ll max(ll x,ll y)
{return x<y?y:x;}

E SS(D r1,D r2)
{E a;
a.x=max(r1.c.x,r2.c.x);
a.y=min(r1.c.y,r2.c.y);
return a;}

E DJ(D r1,D r2)
{E a;
a.x=min(r1.d.x,r2.d.x);
a.y=max(r1.d.y,r2.d.y);
return a;}

ll Aria(E v,E w)
{return (w.x-v.x)*(v.y-w.y);}

ll Peri(E v,E w)
{return 2*((w.x-v.x)+(v.y-w.y));}

D Inter(D r1,D r2)
{D a;
a.c=SS(r1,r2);
a.d=DJ(r1,r2);
return a;}

int inter(D r1,D r2)
{return r1.d.x>=r2.c.x&&r1.c.x<=r2.d.x&&r1.d.y<=r2.c.y&&r1.c.y>=r2.d.y;}

int main()
{FILE *f=fopen("reuniune.in","r"),*g=fopen("reuniune.out","w");
for(i=1;i<4;i++)
        {fscanf(f,"%lld%lld%lld%lld",&a[i].x,&a[i].y,&b[i].x,&b[i].y);
        r[i].c.x=a[i].x,r[i].c.y=b[i].y;
        r[i].d.x=b[i].x,r[i].d.y=a[i].y;
        P+=Peri(r[i].c,r[i].d),A+=Aria(r[i].c,r[i].d);}
if(inter(r[1],r[2]))
        w1=Inter(r[1],r[2]),A-=Aria(w1.c,w1.d),P-=Peri(w1.c,w1.d);
if(inter(r[1],r[3]))
        w2=Inter(r[1],r[3]),A-=Aria(w2.c,w2.d),P-=Peri(w2.c,w2.d);
if(inter(r[2],r[3]))
        w3=Inter(r[2],r[3]),A-=Aria(w3.c,w3.d),P-=Peri(w3.c,w3.d);
if(inter(r[1],r[2])&&inter(w1,r[3]))
        w4=Inter(w1,r[3]),A+=Aria(w4.c,w4.d),P+=Peri(w4.c,w4.d);
fprintf(g,"%lld %lld",A,P);
return 0;}