Cod sursa(job #148211)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 3 martie 2008 23:18:47
Problema Reuniune Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 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 long xsr,ysr,xdr,ydr;
long long xs[10],ys[10],xd[10],yd[10];
int intersectie(long long xs1,long long ys1,long long xd1,long long yd1,
long long xs2,long long ys2,long long xd2,long 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 long a,b,c,d;
  int i,j,last;
  long long arie=0,p=0;
  for(i=1;i<=3;i++)
    fscanf(fin,"%lld%lld%lld%lld",&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]))
    {
      last=0;
      if(intersectie(xs[i],ys[i],xd[i],yd[i],xs[j],ys[j],xd[j],yd[j]))
      {
	last=1;
	arie-=(xdr-xsr)*(ydr-ysr);
	p-=(2*(xdr-xsr)+2*(ydr-ysr));
      }
    }
    else
    {
      last=0;
      if(intersectie(xs[j],ys[j],xd[j],yd[j],xs[i],ys[i],xd[i],yd[i]))
      {
	last=1;
	arie-=(xdr-xsr)*(ydr-ysr);
	p-=(2*(xdr-xsr)+2*(ydr-ysr));
      }
    }
  a=xsr;b=ysr;c=xdr;d=ydr;
  if(last)
  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,"%lld%c%lld",arie,' ',p);
  fclose(fout);
  return 0;
}