Cod sursa(job #148172)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 3 martie 2008 22:51:36
Problema Reuniune Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include<stdio.h>
#define max(a,b)((a)>(b)?(a):(b))
#define min(a,b)((a)<(b)?(a):(b))
FILE*fin=fopen("reuniune.in","r");
FILE*fout=fopen("reuniune.out","w");
long xsr,ysr,xdr,ydr;
long xs[10],ys[10],xd[10],yd[10];
int intersectie(long xs1,long ys1,long xd1,long yd1,
long xs2,long ys2,long xd2,long yd2)
{
  xsr=xs1;ysr=ys1;xdr=xd1;ydr=yd1;
  if(xs1==xs2&&xd1==xd2&&ys1==ys2&&yd1==yd2) return 1;
  if(xd2<=xdr&&xd2>=xsr&&yd2<=ydr&&yd2>=ysr)
  {
    xdr=xd2;
    ydr=yd2;
    xsr=max(xsr,xs2);
    ysr=max(ysr,ys2);
  }
  else
  if(xs2<=xdr&&xs2>=xsr&&ys2<=ydr&&ys2>=ysr)
  {
    xsr=xs2;
    ysr=ys2;
    xdr=min(xdr,xd2);
    ydr=min(ydr,yd2);
  }
  if(xsr!=xs1||xdr!=xd1||ysr!=ys1||ydr!=yd1) return 1;
  return 0;
}
int main()
{
  long arie=0,p=0,a,b,c,d;
  int i,j;
  for(i=1;i<=3;i++)
    fscanf(fin,"%ld%ld%ld%ld",&xs[i],&ys[i],&xd[i],&yd[i]);
  fclose(fin);
  for(i=1;i<=3;i++)
  {
    arie+=(xd[i]-xs[i])*(yd[i]-ys[i]);
    p+=2*(xd[i]-xs[i])+2*(yd[i]-ys[i]);
  }
  for(i=1;i<3;i++)
    for(j=i+1;j<=3;j++)
    if((xd[i]-xs[i])*(yd[i]-ys[i])>(xd[j]-xs[j])*(yd[j]-ys[j]))
    {
      if(intersectie(xs[i],ys[i],xd[i],yd[i],xs[j],ys[j],xd[j],yd[j]))
      {
	arie-=(xdr-xsr)*(ydr-ysr);
	p-=(2*(xdr-xsr)+2*(ydr-ysr));
      }
    }
    else
    {
      if(intersectie(xs[j],ys[j],xd[j],yd[j],xs[i],ys[i],xd[i],yd[i]))
      {
	arie-=(xdr-xsr)*(ydr-ysr);
	p-=(2*(xdr-xsr)+2*(ydr-ysr));
      }
    }
  a=xsr;b=ysr;c=xdr;d=ydr;
  if((c-a)*(d-b)>(xd[1]-xs[1])*(yd[1]-ys[1]))
    {
      if(intersectie(a,b,c,d,xs[1],ys[1],xd[1],yd[1]))
      {
	arie+=(xdr-xsr)*(ydr-ysr);
	p+=2*(xdr-xsr)+2*(ydr-ysr);
      }
    }
  else
    if(intersectie(xs[1],ys[1],xd[1],yd[1],a,b,c,d))
    {
      arie+=(xdr-xsr)*(ydr-ysr);
      p+=2*(xdr-xsr)+2*(ydr-ysr);
    }
  fprintf(fout,"%ld%c%ld",arie,' ',p);
  fclose(fout);
  return 0;
}