Pagini recente » Cod sursa (job #1301255) | Cod sursa (job #214765) | Cod sursa (job #3129064) | Cod sursa (job #538041) | Cod sursa (job #190552)
Cod sursa(job #190552)
#include<stdio.h>
struct pct {
long x,y;
};
struct dr{
pct p[5];
long long a,per;
};
// 1 inter/0 no inter
// aria inter si perim inter; d dr de inter
int isin(dr d,pct p){
return (p.x>=d.p[1].x&&p.x<=d.p[2].x&&p.y>=d.p[1].y&&p.y<=d.p[3].y);
}
int inter(dr a,dr b, long long &ar,long long &pr,dr& d){
long dx=0L,dy=0L;
int ii=a.p[1].x<=b.p[3].x&&a.p[1].y<=b.p[3].y&&
b.p[1].x<=a.p[3].x&&b.p[1].y<=a.p[3].y;
if(!ii) {ar=0L;pr=0L;return 0;}
if(a.p[1].x<=b.p[1].x&&b.p[1].x<=a.p[2].x&&a.p[2].x<=b.p[2].x)
{
dx=a.p[2].x-b.p[1].x;
d.p[4].x=d.p[1].x=b.p[1].x;
d.p[3].x=d.p[2].x=a.p[2].x;
}
if(a.p[1].x<=b.p[1].x&&b.p[2].x<=a.p[2].x)
{
dx=b.p[2].x-b.p[1].x;
d.p[4].x=d.p[1].x=b.p[1].x;
d.p[3].x=d.p[2].x=b.p[2].x;
}
if(b.p[1].x<=a.p[1].x&&a.p[1].x<=b.p[2].x&&b.p[2].x<=a.p[2].x)
{
dx=b.p[2].x-a.p[1].x;
d.p[4].x=d.p[1].x=a.p[1].x;
d.p[3].x=d.p[2].x=b.p[2].x;
}
if(a.p[1].y<=b.p[1].y&&b.p[1].y<=a.p[3].y&&a.p[3].y<=b.p[3].y)
{
dy=a.p[3].y-b.p[1].y;
d.p[1].y=d.p[2].y=b.p[1].y;
d.p[4].y=d.p[3].y=a.p[3].y;
}
if(a.p[1].y<=b.p[1].y&&b.p[3].y<=a.p[3].y)
{
dy=b.p[3].y-b.p[1].y;
d.p[1].y=d.p[2].y=b.p[1].y;
d.p[4].y=d.p[3].y=b.p[3].y;
}
if(b.p[1].y<=a.p[1].y&&a.p[1].y<=b.p[3].y&&b.p[3].y<=a.p[3].y)
{
dy=b.p[3].y-a.p[1].y;
d.p[1].y=d.p[2].y=a.p[1].y;
d.p[4].y=d.p[3].y=b.p[3].y;
}
ar=(long long)dx*dy;
if(ar) pr=(long long)dx*2+(long long)dy*2;
else pr=(long long)dx+dy;
return ii;
}
int main(){
dr v[4]={{0}};
freopen("reuniune.in","r",stdin);
freopen("reuniune.out","w",stdout);
int i,j;
for(i=1;i<=3;i++){
scanf("%ld%ld%ld%ld",&v[i].p[1].x,&v[i].p[1].y,&v[i].p[3].x,&v[i].p[3].y);
v[i].p[2].x=v[i].p[3].x;v[i].p[2].y=v[i].p[1].y;
v[i].p[4].x=v[i].p[1].x;v[i].p[4].y=v[i].p[3].y;
v[i].a=(long long)(v[i].p[2].x-v[i].p[1].x)*(v[i].p[3].y-v[i].p[1].y);
v[i].per=2*(long long)(v[i].p[2].x-v[i].p[1].x)+
2*(long long)(v[i].p[3].y-v[i].p[1].y);
}
dr d[5];
long long a,pr,at,pert;
int ii,k=0;
//intersectiile
at=pert=0L;pr=0L;
long long m[4][4]={{0L}};
for(i=1;i<4;i++) { at+=v[i].a; pert+=v[i].per;}
for(i=1;i<3;i++)
for(j=i+1;j<=3;j++){
ii=inter(v[i],v[j],a,pr,d[k]);
m[i][j]=a;
m[j][i]=pr;
at-=m[i][j];
pert-=m[j][i];
k++;
}
ii=inter(d[0],d[1],a,pr,d[3]);
if(ii)
ii=inter(d[2],d[3],a,pr,d[4]);
if(ii) {at+=a;pert+=pr;}
printf("%lld %lld",at,pert);
return 0;
}