Cod sursa(job #190552)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 23 mai 2008 05:53:54
Problema Reuniune Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#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;
}