Cod sursa(job #340899)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 16 august 2009 22:01:03
Problema Reuniune Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <stdio.h>

long long max(long a,long b)
{
 if (a>b) return a;
 return b;
}

long long min(long a,long b)
{
 if (a<b) return a;
 return b;
}

long long max2(long long a,long long b,long long c)
{
 long long max;
 max=a;
 if (b>a) max=b;
 if (c>max) max=c;
 return max;
}

long long min2(long long a,long long b,long long c)
{
 long long min;
 min=a;
 if (b<a) min=b;
 if (c<min) min=c;
 return min;
}

int main()
{
 int i;
 long long x0[4],y0[4],x1[4],y1[4];
 long long a,p;

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

 for (i=0;i<3;i++)
  scanf("%lld%lld%lld%lld",&x0[i],&y0[i],&x1[i],y1[i]);

 a=(x1[0]-x0[0])*(y1[0]-y0[0]);
 a+=(x1[1]-x0[1])*(y1[1]-y0[1]);
 a+=(x1[2]-x0[2])*(y1[2]-y0[2]);

 a-=(min(x1[0],x1[1])-max(x0[0],x0[1]))*(min(y1[0],y1[1])-max(y0[0],y0[1]));
 a-=(min(x1[2],x1[1])-max(x0[2],x0[1]))*(min(y1[2],y1[1])-max(y0[2],y0[1]));
 a-=(min(x1[0],x1[2])-max(x0[0],x0[2]))*(min(y1[0],y1[2])-max(y0[0],y0[2]));

 a+=(min2(x1[0],x1[1],x1[2])-max2(x0[0],x0[1],x0[2]))*(min2(y1[2],y1[0],y1[1])-max2(y0[2],y0[0],y0[1]));

 p=2*(x1[0]-x0[0])+(y1[0]-y0[0]);
 p+=2*(x1[1]-x0[1])+(y1[1]-y0[1]);
 p+=2*(x1[2]-x0[2])+(y1[2]-y0[2]);

 p-=2*((min(x1[0],x1[1])-max(x0[0],x0[1]))+(min(y1[0],y1[1])-max(y0[0],y0[1])));
 p-=2*((min(x1[2],x1[1])-max(x0[2],x0[1]))+(min(y1[2],y1[1])-max(y0[2],y0[1])));
 p-=2*((min(x1[0],x1[2])-max(x0[0],x0[2]))+(min(y1[0],y1[2])-max(y0[0],y0[2])));

 p+=2*(min2(x1[0],x1[1],x1[2])-max2(x0[0],x0[1],x0[2])+min2(y1[2],y1[0],y1[1])-max2(y0[2],y0[0],y0[1]));

 printf("%lld%c%lld",a,' ',p);

 return 0;
}