Cod sursa(job #190440)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 22 mai 2008 18:15:30
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>

struct pct {
	long x,y;
	};

struct dr{
	pct p[5];
	long a,per;
	};

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);
}

long ariai(dr a,dr b, long &pr){
long dx=0L,dy=0L;
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;
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;
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=b.p[2].x-a.p[1].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;
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;
if(a.p[1].y>=b.p[1].y&&b.p[3].y>=a.p[1].y&&a.p[3].y>b.p[3].y)
	dy=b.p[3].y-a.p[1].y;
pr=dx*2+dy*2;
return (long)dx*dy;
}

int main(){
dr v[4];
freopen("reuniune.in","r",stdin);
freopen("reuniune.out","w",stdout);
int i,j,pi;
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=(v[i].p[2].x-v[i].p[1].x)*(v[i].p[3].y-v[i].p[1].y);
	v[i].per=2*(v[i].p[2].x-v[i].p[1].x)+2*(v[i].p[3].y-v[i].p[1].y);
	}
long a,per;
//intersectiile
a=per=0L;
long  m[4][4]={{0L}},pr=0L;
for(i=1;i<4;i++) {	a+=v[i].a; per+=v[i].per;}
for(i=1;i<3;i++)
	for(j=i+1;j<=3;j++){
		m[i][j]=ariai(v[i],v[j],pr);
		m[j][i]=pr;
		a-=m[i][j];
		per-=m[j][i];
		}

printf("%ld %ld",a,per);
return 0;
}