Cod sursa(job #352896)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 3 octombrie 2009 18:11:48
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

FILE *f,*s;

struct dreptunghi
{
	long long int x1,x2;
	long long int y1,y2;
};

long long int rez,per;

dreptunghi a,b,c,ab,ac,bc,abc_t,abc;

dreptunghi intersectie(dreptunghi x, dreptunghi y)
{
	dreptunghi z;
	
	z.x1=0;
	z.x2=0;
	
	z.y1=0;
	z.y2=0;
	
	long long int i,j,k,l;
	
	i=max(x.x1,y.x1);
	j=min(x.x2,y.x2);
	
	k=max(x.y1,y.y1);
	l=min(x.y2,y.y2);
	
	if(i<=j && k<=l)
	{
		z.x1=i;
		z.x2=j;
		
		z.y1=k;
		z.y2=l;
	}	
	
	return z;
	
}

int main()
{
	f=fopen("reuniune.in","r");
	s=fopen("reuniune.out","w");
	
	fscanf(f,"%lld %lld %lld %lld",&a.x1,&a.y1,&a.x2,&a.y2);
	fscanf(f,"%lld %lld %lld %lld",&b.x1,&b.y1,&b.x2,&b.y2);
	fscanf(f,"%lld %lld %lld %lld",&c.x1,&c.y1,&c.x2,&c.y2);
	
	a.x1+=1000000000;
	a.x2+=1000000000;
	a.y1+=1000000000;
	a.y2+=1000000000;
	
	b.x1+=1000000000;
	b.x2+=1000000000;
	b.y1+=1000000000;
	b.y2+=1000000000;
	
	c.x1+=1000000000;
	c.x2+=1000000000;
	c.y1+=1000000000;
	c.y2+=1000000000;

	ab=intersectie(a,b);
	ac=intersectie(a,c);
	bc=intersectie(b,c);
	
	abc_t=intersectie(ab,ac);
	abc=intersectie(abc_t,bc);
	
	rez = ((a.x2-a.x1)*(a.y2-a.y1)) + ((b.x2-b.x1)*(b.y2-b.y1)) + ((c.x2-c.x1)*(c.y2-c.y1));

	rez = rez - ((ab.x2-ab.x1)*(ab.y2-ab.y1)) - ((bc.x2-bc.x1)*(bc.y2-bc.y1)) - ((ac.x2-ac.x1)*(ac.y2-ac.y1));
	
	rez = rez + ((abc.x2-abc.x1)*(abc.y2-abc.y1));
	
	
	per = ((a.x2-a.x1)+(a.y2-a.y1))*2 + ((b.x2-b.x1)+(b.y2-b.y1))*2 + ((c.x2-c.x1)+(c.y2-c.y1))*2;
	
	per = per - ((ab.x2-ab.x1)+(ab.y2-ab.y1))*2 - ((bc.x2-bc.x1)+(bc.y2-bc.y1))*2 - ((ac.x2-ac.x1)+(ac.y2-ac.y1))*2;
	
	per = per + ((abc.x2-abc.x1)+(abc.y2-abc.y1))*2;
	
	
	fprintf(s,"%lld %lld",rez,per);
	
	fclose(s);
	
	return 0;
}