Pagini recente » Cod sursa (job #1933648) | Cod sursa (job #1468090) | Cod sursa (job #2384158) | Cod sursa (job #1710690) | Cod sursa (job #1153341)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct puncte{
long long x0,x1,y0,y1;
};
puncte v[4];
long long A,P,X0=-1000000001,Y0=-1000000001,X1=1000000001,Y1=1000000001;
int cmp(puncte aa,puncte bb)
{
if(aa.x0==bb.x0)
{
if(aa.y0==bb.y0)
{
if(aa.x1==bb.x1)
return aa.y1<bb.y1;
return aa.x1<bb.x1;
}
return aa.y0<bb.y0;
}
return aa.x0<bb.x0;
}
int verificare(int i,int j)
{
if(v[j].x0>v[i].x1)
return 0;
if(v[j].y0>v[i].y1)
return 0;
return 1;
}
void functie(int i,int j)
{
long long cja=max(v[i].x0,v[j].x0);
long long cjo=max(v[i].y0,v[j].y0);
long long csa=min(v[i].x1,v[j].x1);
long long cso=min(v[i].y1,v[j].y1);
if(verificare(i,j))
{
A=A-(csa-cja)*(cso-cjo);
P=P-(csa-cja+cso-cjo)*2;
}
}
int main()
{
int i,j;
FILE *f=fopen("reuniune.in","r");
FILE *g=fopen("reuniune.out","w");
for(i=1;i<=3;i++)
{
fscanf(f,"%lld%lld%lld%lld",&v[i].x0,&v[i].y0,&v[i].x1,&v[i].y1);
A=A+(v[i].x1-v[i].x0)*(v[i].y1-v[i].y0);
P=P+(v[i].x1-v[i].x0+v[i].y1-v[i].y0)*2;
X0=max(v[i].x0,X0);
Y0=max(v[i].y0,Y0);
X1=min(v[i].x1,X1);
Y1=min(v[i].y1,Y1);
}
sort(v+1,v+4,cmp);
j=1;
for(i=1;i<=3;i++)
if(X0>v[i].x1 || Y0>v[i].y1
|| X1<v[i].x0 || Y1<v[i].y0)
j=0;
if(j)
A=A+(X1-X0)*(Y1-Y0),P=P+(X1-X0+Y1-Y0)*2;
for(i=1;i<3;i++)
{
for(j=i+1;j<=3;j++)
{
functie(i,j);
}
}
fprintf(g,"%lld %lld\n",A,P);
return 0;
}