Cod sursa(job #1226395)

Utilizator IoanZioan zahiu IoanZ Data 5 septembrie 2014 13:04:23
Problema Reuniune Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct DREPTUNGHI
{
	int x0,y0,x1,y1;
};

DREPTUNGHI intersectie(DREPTUNGHI d1,DREPTUNGHI d2)
{
	DREPTUNGHI d12;
	d12.x0=max(d1.x0,d2.x0);
	d12.x1=min(d1.x1,d2.x1);
	d12.y0=max(d1.y0,d2.y0);
	d12.y1=min(d1.y1,d2.y1);
	if ((d12.x0>d12.x1)||(d12.y0>d12.y1))
	    d12.x0=d12.x1=d12.y0=d12.y1=0;
	return d12;
}

long long arie(DREPTUNGHI d)
{
	return ((long long)d.x1-d.x0)*(d.y1-d.y0);
}

long long perimetru(DREPTUNGHI d)
{
	return (2LL*((d.x1-d.x0)+(d.y1-d.y0)));
}

int main()
{
	FILE *f1,*f2;
	f1=fopen("reuniune.in","r");
	f2=fopen("reuniune.out","w");
	int a,b,c,d;
	long long aa,p;
	DREPTUNGHI d1,d2,d3,d12,d13,d23,d123;
	fscanf(f1,"%d%d%d%d",&a,&b,&c,&d);
	d1.x0=a;
	d1.y0=b;
	d1.x1=c;
	d1.y1=d;
	fscanf(f1,"%d%d%d%d",&a,&b,&c,&d);
	d2.x0=a;
	d2.y0=b;
	d2.x1=c;
	d2.y1=d;
	fscanf(f1,"%d%d%d%d",&a,&b,&c,&d);
	d3.x0=a;
	d3.y0=b;
	d3.x1=c;
	d3.y1=d;
	fclose(f1);
	d12=intersectie(d1,d2);
	d13=intersectie(d1,d3);
	d23=intersectie(d2,d3);
	d123=intersectie(d12,d3);
	aa=arie(d1)+arie(d2)+arie(d3)-arie(d12)-arie(d13)-arie(d23)+arie(d123);
	p=perimetru(d1)+perimetru(d2)+perimetru(d3)-perimetru(d12)-perimetru(d13)-perimetru(d23)+perimetru(d123);
	fprintf(f2,"%lld %lld",aa,p);
	fclose(f2);
    return 0;
}