Cod sursa(job #187012)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 29 aprilie 2008 20:08:39
Problema Patrate 3 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<limits.h>
#define NMAX	1000
#define DIF 0.00001
struct pct {double  x,y;};
struct segment {
	double d;
	double p;
	pct c;};

int main()
{
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
int n,i,j,k,l,nrptr;
pct	v[NMAX]={{0.0,0.0}};
scanf("%d",&n);
i=0;
double x,y;
while(i<n) {
	scanf("%lf%lf", &x,&y);
	(v+i)->x=x;
	(v+i)->y=y;
	i++;
	}
double dx,dy,dij,dik,dil,djl,dmica,dmare;
int diag,ok,latura;
nrptr=0;
for(i=0;i<n-3;i++)
	for(j=i+1;j<n-2;j++)
		{
		dx=v[i].x-v[j].x;
		dy=v[i].y-v[j].y;
		dij=sqrt(dx*dx+dy*dy);
		dmare=dij*sqrt(2);
		dmica=dmare/2;
		for(k=j+1;k<n-1;k++)
			{
			dx=v[i].x-v[k].x;
			dy=v[i].y-v[k].y;
			dik=sqrt(dx*dx+dy*dy);
			diag=0;latura=0;ok=0;
			if(fabs(dik-dij)<DIF) {latura=1;ok=1;}
			if(!ok) if(fabs(dik-dmica)<DIF) {diag=1;ok=1;}
			if(!ok) if(fabs(dik-dmare)<DIF) {diag=2;ok=1;}
			if(ok)
				for(l=k+1;l<n;l++)
					{
					dx=v[i].x-v[l].x;
					dy=v[i].y-v[l].y;
					dil=sqrt(dx*dx+dy*dy);
					dx=v[j].x-v[l].x;
					dy=v[j].y-v[l].y;
					djl=sqrt(dx*dx+dy*dy);
					if(latura&&fabs(dmare-dil)<DIF&&fabs(dij-djl)<DIF)
						{nrptr++;
  //	printf("latura %lf %lf %lf %lf\n",dij,dik,dil,djl);
	}
					if(diag==2)
						if(fabs(dij-dil)<DIF&&fabs(dmare-djl)<DIF)
						{nrptr++;
  //	printf("dmare %lf %lf %lf %lf\n",dij,dik,dil,djl);
	}
					if(diag==1)
						if(fabs(dmica-dil)<DIF&&fabs(dmica-djl)<DIF)
						{nrptr++;
 //	printf("dmica %lf %lf %lf %lf\n",dij,dik,dil,djl);
	}
					}
			}
		}
printf("%d",nrptr);
return 0;
}