Cod sursa(job #521654)
#include <stdio.h>
#include <math.h>
#define ll long long
struct drept {
int x0,y0,x1,y1;
};
int i,j,nri;
drept D[10];
double A1,A2,A3,At,A[10];
ll Pt,P[10];
bool trei=true;
void citire()
{
for(i=1;i<=3;i++)
scanf("%d %d %d %d",&D[i].x0,&D[i].y0,&D[i].x1,&D[i].y1);
}
int max(int a, int b)
{
if(a>b) return a;
return b;
}
int min(int a, int b)
{
if(a<b) return a;
return b;
}
int mod(int a)
{
if(a<0) return -a;
return a;
}
void arii_perimetre()
{
double L1,L2;
for(i=1;i<=3;i++)
{
L1=D[i].x1-D[i].x0; L2=D[i].y1-D[i].y0;
A[i]=L1*L2; P[i]=2*(ll)((ll)L1+(ll)L2);
}
nri=3;
}
void intersectii()
{
int L1,L2,ix0,iy0,ix1,iy1;
for(i=1;i<=2;i++)
for(j=i+1;j<=3;j++)
{
ix0=max(D[i].x0,D[j].x0); iy0=max(D[i].y0,D[j].y0);
ix1=min(D[i].x1,D[j].x1); iy1=min(D[i].y1,D[j].y1);
L1=mod(ix1)-mod(ix0); L2=mod(iy1)-mod(iy0);
if(ix0<=ix1 && iy0<=iy1)
{
A[++nri]=L1*L2;
P[nri]=2*(ll)((ll)L1+(ll)L2);
}
if(L1*L2==0)
{
P[++nri]=2*(ll)((ll)mod(L1)+(ll)mod(L2));
trei=false;
}
}
if(trei)
{
ix0=max(ix0,D[1].x0); iy0=max(iy0,D[1].y0);
ix1=min(ix1,D[1].x1); iy1=min(iy1,D[1].y1);
L1=mod(ix1)-mod(ix0); L2=mod(iy1)-mod(iy0);
if(ix0<=ix1 && iy0<=iy1)
{
A[++nri]=L1*L2;
P[nri]=2*(ll)((ll)L1+(ll)L2);
}
}
}
void pinex()
{
At=A[1]+A[2]+A[3];
Pt=P[1]+P[2]+P[3];
for(i=4;i<=6;i++)
{
At-=A[i];
Pt-=P[i];
}
At+=A[7]; Pt+=P[7];
}
int main()
{
freopen("reuniune.in","r",stdin);
freopen("reuniune.out","w",stdout);
citire();
arii_perimetre();
intersectii();
pinex();
printf("%.0f %lld",At,Pt);
}