Cod sursa(job #7234)

Utilizator hadesgamesTache Alexandru hadesgames Data 21 ianuarie 2007 13:12:02
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 9-a si gimnaziu Marime 1.48 kb
#include <stdio.h>
#include <math.h>
#include <float.h>
double c[100];
int d[100];
int egal(float a,float b)
{
	if (abs(a-b)>=0.0001)
		return 0;
	else
		return 1;
}
int comp(float a,float b)
{
	if (b-a>=0.0001)
		return 1;
	else
		return 0;

}
void  Sort(int l, int r)
{
  int i, j, aux;
  double y,x;
  i = l;
  j = r;
  x = c[(l+r)/2];
  do
  {
	while (comp(c[i], x))
	  i = i + 1;
	while (comp(x, c[j]))
		j = j - 1;
	if (i <= j)
	{
	  y = c[i];
	  c[i] = c[j];
	  c[j] = y;
	  aux=d[i];
	  d[i]=d[j];
	  d[j]=aux;
	  i = i + 1;
	  j = j - 1;
	}
  }
  while (i <= j);
  if (l < j)  Sort(l, j);
  if (i < r ) Sort(i, r);
}

int main()
{
	FILE *in,*out;
	int n,i,j,j2,aux=0;
	float a[100],b[100];
	long nr=0;

	in=fopen("patrate3.in","r");
	out=fopen("patrate3.out","w");
	fscanf(in,"%d",&n);
	for(i=1;i<=n;i++)
	{
		fscanf(in,"%f%f",&a[i],&b[i]);
	}
	i=1;
	while (i<=n-3)
	{
		for (j=1;j<=n;j++)
			d[j]=j;
		for (j=i+1;j<=n;j++)
			c[j]=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
		Sort(i+1,n);
		for (j=i+1;j<=n;j++)
			while (egal(c[j],c[j+1]))
			{
				for (j2=j+1;j2<=n;j2++)
					if ((egal(c[j2],c[j]*sqrt(2)))&&(egal(c[j],sqrt((a[d[j]]-a[d[j2]])*(a[d[j]]-a[d[j2]])+(b[d[j]]-b[d[j2]])*(b[d[j]]-b[d[j2]]))))&&(egal(c[j],sqrt((a[d[j+1]]-a[d[j2]])*(a[d[j+1]]-a[d[j2]])+(b[d[j+1]]-b[d[j2]])*(b[d[j+1]]-b[d[j2]])))) )
						nr++;
				j++ ;
			}
		i++;
	}
	fprintf(out,"%ld",nr);
	fclose(out);
	fclose(in);
	return 0;
}