Cod sursa(job #479980)

Utilizator nautilusCohal Alexandru nautilus Data 25 august 2010 22:04:58
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<fstream>
using namespace std;

long x11,y11,x12,y12,x21,y21,x22,y22,x31,y31,x32,y32;
int ok1,ok2,ok3,k;
long long a[5],p[5],aria,perim;

int intersectare(long x11,long y11,long x12,long y12,long x21,long y21,long x22,long y22)
{
 if ( ((x21>=x11 && x21<=x12) && ((y21>=y11 && y21<=y12) || (y22>=y11 && y22<=y12))) || /*colt dreapta */
	  ((x11>=x21 && x11<=x22) && ((y12>=y21 && y12<=y22) || (y11>=y21 && y11<=y22))) ) /*colt stanga*/
	    return 1;
 return 0;
}

void calcul(long x11,long y11,long x12,long y12,long x21,long y21,long x22,long y22)
{
 long xi1,yi1,xi2,yi2;
	
 xi1=max(x11,x21); yi1=max(y11,y21);
 xi2=min(x12,x22); yi2=min(y12,y22);
 
 a[k]=(xi2-xi1) * (yi2-yi1);
 p[k]=(xi2-xi1)*2 + (yi2-yi1)*2;
}

void calculinter()
{
 long xi1,yi1,xi2,yi2;
	
 xi1=max(max(x11,x21),x31); yi1=max(max(y11,y21),y31);
 xi2=min(min(x12,x22),x32); yi2=min(min(y12,y22),y32);
 
 a[k]=(xi2-xi1) * (yi2-yi1);
 p[k]=(xi2-xi1)*2 + (yi2-yi1)*2;
}

int main()
{
	
 ifstream fin("reuniune.in");
 fin>>x11>>y11>>x12>>y12;
 fin>>x21>>y21>>x22>>y22;
 fin>>x31>>y31>>x32>>y32;
 
 ok1=intersectare(x11,y11,x12,y12,x21,y21,x22,y22); /*D1 cu D2*/
 ok2=intersectare(x11,y11,x12,y12,x31,y31,x32,y32); /*D1 cu D3*/
 ok3=intersectare(x31,y31,x32,y32,x21,y21,x22,y22); /*D3 cu D2*/
 
 k=1; /*D1 cu D2*/
 if (ok1==1)
	 calcul(x11,y11,x12,y12,x21,y21,x22,y22);
 k=2; /*D1 cu D3*/
 if (ok2==1) 
	 calcul(x11,y11,x12,y12,x31,y31,x32,y32);
 k=3; /*D3 cu D2*/
 if (ok3==1)
	 calcul(x31,y31,x32,y32,x21,y21,x22,y22);
 k=4; /*D1 cu D2 cu D3*/
 if (ok1==1 && ok2==1 && ok3==1)
	 calculinter();
 
 aria=(x12-x11)*(y12-y11) + (x22-x21)*(y22-y21) + (x32-x31)*(y32-y31) - a[1] - a[2] - a[3]; 
 perim=(x12-x11)*2+(y12-y11)*2 + (x22-x21)*2+(y22-y21)*2 + (x32-x31)*2+(y32-y31)*2 - p[1] - p[2] - p[3]; 
 if (ok1==1 && ok2==1 && ok3==1)
	 {
	  aria+=a[4];
	  perim+=p[4];
	 }
 
 ofstream fout("reuniune.out");
 fout<<aria<<" "<<perim;

 fin.close();
 fout.close(); 
 
 return 0;
}