Cod sursa(job #948441)

Utilizator vlad2309pascariu vlad vlad2309 Data 10 mai 2013 13:37:08
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include<fstream>
#include<algorithm>
#define LL long long
using namespace std;
ifstream f("reuniune.in"); 
ofstream g("reuniune.out");
struct dr{LL x1,y1,x2,y2;} d[4]; 
LL arie,P;
LL Ax1,Ay1,Ax2,Ay2;
LL Bx1,By1,Bx2,By2;
LL Cx1,Cy1,Cx2,Cy2;
LL ABx1,ABy1,ABx2,ABy2;
LL ACx1,ACy1,ACx2,ACy2;
LL BCx1,BCy1,BCx2,BCy2;
LL ABCx1,ABCy1,ABCx2,ABCy2;
dr ins(dr a, dr b)
{   dr s; 
    s.x1=max(a.x1,b.x1); 
    s.y1=max(a.y1,b.y1); 
    s.x2=min(a.x2,b.x2); 
    s.y2=min(a.y2,b.y2); 
    if (s.x1 > s.x2 ||s.y1 > s.y2) return (dr){0,0,0,0}; 
    return s; 
} 
LL peri(dr D){return 2*(D.x2-D.x1)+2*(D.y2-D.y1);}
int main()
{	
	f>>Ax1>>Ay1>>Ax2>>Ay2;
	f>>Bx1>>By1>>Bx2>>By2;
	f>>Cx1>>Cy1>>Cx2>>Cy2;
	arie=(Ax2-Ax1)*(Ay2-Ay1)+(Bx2-Bx1)*(By2-By1)+(Cx2-Cx1)*(Cy2-Cy1);
	ABx1=max(Ax1,Bx1);
	ABy1=max(Ay1,By1);
	ABx2=max(Ax2,Bx2);
	ABy2=max(Ax2,By2);
	LL dx=ABx2-ABx1,dy=ABy2-ABy1;
	if(dx>=0 && dy>=0) arie=arie-dx*dy;
	
	ACx1=max(Ax1,Cx1);
	ACy1=max(Ay1,Cy1);
	ACx2=max(Ax2,Cx2);
	ACy2=max(Ax2,Cy2);
	dx=ACx2-ACx1,dy=ACy2-ACy1;
	if(dx>=0 && dy>=0) arie=arie-dx*dy;
	
	BCx1=max(Cx1,Bx1);
	BCy1=max(Cy1,By1);
	BCx2=max(Cx2,Bx2);
	BCy2=max(Cx2,By2);
	dx=BCx2-BCx1,dy=BCy2-BCy1;
	if(dx>=0 && dy>=0) arie=arie-dx*dy;
	
	ABCx1=max(ACx1,Bx1);
	ABCy1=max(ACy1,By1);
	ABCx2=max(ACx2,Bx2);
	ABCy2=max(ACy2,By2);
	
	dx=ABCx2-ABCx1,dy=ABCy2-ABCy1;
	if(dx>=0 && dy>=0) arie=arie+dx*dy;
	
	P= peri(d[1])+peri(d[2])+peri(d[3])- peri(ins(d[1],d[2]))-peri(ins(d[1],d[3]))-peri(ins(d[2],d[3]))+ peri(ins(ins(d[1],d[2]),d[3])); 
	
	g<<arie<<" "<<P<<"\n";
	g.close();
	
	
	
	
	return 0;
}

/*#include<fstream> 
#define LL long long
using namespace std; 
ifstream f("reuniune.in"); ofstream g("reuniune.out"); 
struct dr{LL x1,y1,x2,y2;} d[4]; 
LL A,P; 
LL arie(dr D){return   (D.x2-D.x1) * (D.y2-D.y1);} 
LL peri(dr D){return 2*(D.x2-D.x1)+2*(D.y2-D.y1);} 
dr ins(dr a, dr b)
{   dr s; 
    s.x1=max(a.x1,b.x1); 
    s.y1=max(a.y1,b.y1); 
    s.x2=min(a.x2,b.x2); 
    s.y2=min(a.y2,b.y2); 
    if (s.x1 > s.x2 ||s.y1 > s.y2) return (dr){0,0,0,0}; 
    return s; 
} 
int main()
{   for(int i=1;i<=3;++i) f>>d[i].x1>>d[i].y1>>d[i].x2>>d[i].y2; 
    A= arie(d[1])+arie(d[2])+arie(d[3])- arie(ins(d[1],d[2]))-arie(ins(d[1],d[3]))-arie(ins(d[2],d[3]))+ arie(ins(ins(d[1],d[2]),d[3])); 
    P= peri(d[1])+peri(d[2])+peri(d[3])- peri(ins(d[1],d[2]))-peri(ins(d[1],d[3]))-peri(ins(d[2],d[3]))+ peri(ins(ins(d[1],d[2]),d[3])); 
    g<<A<<' '<<P<<'\n'; 
    g.close(); return 0; 
}




*/