Cod sursa(job #42930)

Utilizator g3ppyStoian Vlad g3ppy Data 29 martie 2007 17:18:00
Problema Patrate 3 Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream.h>
#include <math.h>
#include <stdio.h>
FILE* fout;
struct pct {long x,y;};
pct a[1001];
long aux,x0,yp,x1,ys,x2,y2,x3,y3,mijx,mijy,dx,dy;
int viz[1001],g1,g2;


long comp(double cm1, double cm2)
  {
   if (cm2-cm1>-0.00001&&cm2-cm1<0.00001) return 0;
   return 1;
   }


int main()
{int i,n,k,ok,j,p=0;
long xxi,yyi,m1,m2;
double xx,yy;
ifstream fin("patrate3.in");
fout=fopen("patrate3.out","wt");
fin>>n;
for (i=0;i<n;i++)
    {
    fin>>xx>>yy;
    xx*=1000000;
    xxi=xx;
    yy*=1000000;
    yyi=yy;
    if (comp(xxi,xx)) xxi++;
    if (comp(yyi,yy)) yyi++;
    a[i].x=xxi;
    a[i].y=yyi;
    }
for(i=0;i<n-1;i++)
   for (j=i+1;j<n;j++)
       {

       if ((viz[i]==0&&viz[j]==0)||viz[i]!=viz[j])
       {
       x0=a[i].x;
       yp=a[i].y;
       x1=a[j].x;
       ys=a[j].y;
       if (x0>x1)
	  {
	  aux=x1;
	  x1=x0;
	  x0=aux;
	  aux=ys;
	  ys=yp;
	  yp=aux;
	  }
       mijx=(x0+x1)/2;
       mijy=(yp+ys)/2;

       dx=mijx-x0;
       dy=mijy-yp;
       if(dx<0) dx*=-1;
       if(dy<0) dy*=-1;

       if (yp<ys)
	  {
	  x2=mijx+dy;
	  y2=mijy-dx;
	  x3=mijx-dy;
	  y3=mijy+dx;
	  }
       else
	  {
	  x2=mijx-dy;
	  y2=mijy-dx;
	  x3=mijx+dy;
	  y3=mijy+dx;
	  }
       ok=0;
       g2=g1=1;
       for (k=0;k<=(n-1)/2;k++)
	  {
	  if (x2==a[k].x&&y2==a[k].y&&g1){g1=0; ok++; m1=k;}
	  else
	     if (x2==a[n-k-1].x&&y2==a[n-k-1].y&&g1) {g1=0; ok++; m1=n-k-1;}

	  if (x3==a[k].x&&y3==a[k].y&&g2) {g2=0; ok++; m2=k;}
	   else
	     if (x3==a[n-k-1].x&&y3==a[n-k-1].y&&g2){g2=0; ok++; m2=n-k-1;}

	  if (ok==2) break;
	  }
       if (ok>=2)
	 {
	  p++;
	 viz[m1]=p;
	 viz[m2]=p;
	 viz[i]=p;
	 viz[j]=p;
	 }
       }


       }

fprintf(fout,"%d\n",p);
return 0;

}