Cod sursa(job #1225389)

Utilizator ccygnusMaygnus Pop ccygnus Data 2 septembrie 2014 15:15:37
Problema Reuniune Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct drept
{
	int x1,y1,x2,y2;
}d1,d2,d3;
drept intersectie(drept d1,drept d2)
{
	drept dr;
	dr.x1=max(d1.x1,d2.x1);
	dr.y1=max(d1.y1,d2.y1);
	dr.x2=min(d1.x2,d2.x2);
	dr.y2=min(d1.y2,d2.y2);
	if (dr.x1>dr.x2 || dr.y1>dr.y2)
        dr.x1=dr.x2=dr.y1=dr.y2=0;
    return dr;
}
long long arie(drept d)
{
	long long a=0;
	a=((long long)d.x2-d.x1)*(d.y2-d.y1);
	return a;
}
int perimetru(drept d)
{
	int p=0;
	p=(d.x2-d.x1)*2+(d.y2-d.y1)*2;
	return p;
}
int main()
{
	freopen("reuniune.in","r",stdin);
	freopen("reuniune.out","w",stdout);
	long long a=0,p=0;
	drept d;
	scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d",&d1.x1,&d1.y1,&d1.x2,&d1.y2,&d2.x1,&d2.y1,&d2.x2,&d2.y2,&d3.x1,&d3.y1,&d3.x2,&d3.y2);
	a=arie(d1)+arie(d2)+arie(d3);
	p=perimetru(d1)+perimetru(d2)+perimetru(d3);
	a=a-arie(intersectie(d1,d2))-arie(intersectie(d1,d3))-arie(intersectie(d2,d3));
	p=p-perimetru(intersectie(d1,d2))-perimetru(intersectie(d1,d3))-perimetru(intersectie(d2,d3));
	d=intersectie(d1,d2);
	d=intersectie(d,d3);
	a=a+arie(d);
	p=p+perimetru(d);
	printf("%lld %lld\n",a,p);
return 0;
}