Cod sursa(job #279299)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 12 martie 2009 19:21:39
Problema Reuniune Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#define maxx(a,b) ((a>b)?a:b)
#define minn(a,b) ((a<b)?a:b)
#define absl(a) (((a)<0)?-(a):(a))
long long x1[5],x2[5],y1[5],y2[5],i,sol;
int ok[5][5];

long long inter(int i,int j){
  int xx1,yy1,xx2,yy2;
  xx1= maxx( x1[i],x1[j] );
  xx2= minn( x2[i],x2[j] );
  yy1= maxx( y1[i],y1[j] );
  yy2 =minn( y2[i],y2[j] );
  if (i==2&&j==3){x1[4]=xx1;x2[4]=xx2;y1[4]=yy1;y2[4]=yy2;}
  if (xx1>xx2||yy1>yy2){ok[i][j]=1;return 0;}
return (xx2-xx1)*(yy2-yy1);
}
long long per(int i,int j){
  int xx1,yy1,xx2,yy2;
  xx1= maxx( x1[i],x1[j] );
  xx2= minn( x2[i],x2[j] );
  yy1= maxx( y1[i],y1[j] );
  yy2 =minn( y2[i],y2[j] );
  if (i==2&&j==3){x1[4]=xx1;x2[4]=xx2;y1[4]=yy1;y2[4]=yy2;}
  if (xx1>xx2||yy1>yy2){ok[i][j]=1;return 0;}
return (xx2-xx1)*2+(yy2-yy1)*2;
}
int main(){
  freopen("reuniune.in","r",stdin); freopen("reuniune.out","w",stdout);
  scanf("%lld %lld %lld %lld",&x1[1],&y1[1],&x2[1],&y2[1]);
  scanf("%lld %lld %lld %lld",&x1[2],&y1[2],&x2[2],&y2[2]);
  scanf("%lld %lld %lld %lld",&x1[3],&y1[3],&x2[3],&y2[3]);
  for (i=1;i<=3;++i)sol+=absl(x1[i]-x2[i])*absl(y1[i]-y2[i]);
  sol-=inter(1,3);
  sol-=inter(1,2);
  sol-=inter(2,3);
  if (!ok[2][3])sol+=inter(1,4);
  printf("%lld ",sol);
  sol=0;
  for (i=1;i<=3;++i)sol+=2*(x2[i]-x1[i])+2*(y2[i]-y1[i]);
  sol-=per(1,3);
  sol-=per(1,2);
  sol-=per(2,3);
  if (!ok[2][3])sol+=per(1,4);
  printf("%lld\n",sol);
return 0;
}