Cod sursa(job #37187)

Utilizator RutZapGruia Radu RutZap Data 24 martie 2007 17:47:25
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int aria(int x1, int y1, int x2, int y2,int a1, int b1,int a2,int b2)
{
int t1,p1,t2,p2;

if (x1 <= a1)  t1=a1;
	  else t1=x1;
if (y1 >= b1)  p1=b1;
	  else p1=y1;

if (x2 <= a2)  t2=x2;
	  else t2=a2;
if (y2 >= b2)  p2=y2;
	  else p2=b2;

return abs((t2-t1)*(p1-p2));

}

int perimetru(int x1, int y1, int x2, int y2,int a1, int b1,int a2,int b2)
{
int t1,p1,t2,p2;

if (x1 <= a1)  t1=a1;
	  else t1=x1;
if (y1 >= b1)  p1=b1;
	  else p1=y1;

if (x2 <= a2)  t2=x2;
	  else t2=a2;
if (y2 >= b2)  p2=y2;
	  else p2=b2;

return abs((t2-t1)*2) +abs((p1-p2)*2);

}


int main()
{
freopen("reuniune.in","r", stdin);
freopen("reuniune.out","w", stdout);

long x1s,x1j,y1s,y1j,x2s,x2j,y2s,y2j,x3s,x3j,y3s,y3j;
long arie=0, perim=0;

scanf("%ld %ld %ld %ld", &x1s, &y1j, &x1j, &y1s);
scanf("%ld %ld %ld %ld", &x2s, &y2j, &x2j, &y2s);
scanf("%ld %ld %ld %ld", &x3s, &y3j, &x3j, &y3s);

arie = abs((x1j-x1s)*(y1s-y1j));
arie += abs((x2j-x2s)*(y2s-y2j));
arie += abs((x3j-x3s)*(y3s-y3j));

arie -= aria(x1s,y1s,x1j,y1j,x2s,y2s,x2j,y2j);
arie -= aria(x1s,y1s,x1j,y1j,x3s,y3s,x3j,y3j);
arie -= aria(x3s,y3s,x3j,y3j,x2s,y2s,x2j,y2j);


int t1,p1,t2,p2;

if (x1s <= x2s)  t1=x2s;
	  else t1=x1s;
if (y1s >= y2s)  p1=y2s;
	  else p1=y1s;

if (x1j <= x2j)  t2=x1j;
	  else t2=x2j;
if (y1j >= y2j)  p2=y1j;
	  else p2=y2j;

arie += aria(x3s,y3s,x3j,y3j,t1,p1,t2,p2);



perim =abs((x1j-x1s)*2) + abs((y1s-y1j))*2;
perim +=abs((x2j-x2s)*2) + abs((y2s-y2j))*2;
perim +=abs((x3j-x3s)*2) + abs((y3s-y3j))*2;

perim -= perimetru(x1s,y1s,x1j,y1j,x2s,y2s,x2j,y2j);
perim -= perimetru(x1s,y1s,x1j,y1j,x3s,y3s,x3j,y3j);
perim -= perimetru(x3s,y3s,x3j,y3j,x2s,y2s,x2j,y2j);

perim += perimetru(x3s,y3s,x3j,y3j,t1,p1,t2,p2);

printf("%ld %ld", arie,perim);
return 0;
}