Cod sursa(job #42369)

Utilizator alle_forever13Alexandra Retegan alle_forever13 Data 29 martie 2007 09:41:44
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<stdio.h>
#include<math.h>

#define input "triang.in"
#define output "triang.out"

#define dim 101

void citire();
void ordonare();
int cauta(int p, int q);

int k;
double n, i, j, a[3][dim], x, y, d;

FILE *in, *out;

int main()
{
	in = fopen (input, "r");
	out = fopen (output, "w");

	citire();

	ordonare();

	for(i=1; i<=n; i++)

		for(j=i+1; j<=n; j++)
		{
			d = sqrt(abs((a[1][i]-a[1][j])*(a[1][i]-a[1][j])-(a[2][i]-a[2][j])*(a[2][i]-a[2][j])));

			x = a[2][i]-a[2][j];

			y = a[1][i]-a[1][j]+(d*1,732)/2;

			if(cauta(x,y))

				k++;
		}

	fprintf(out, "%d", k+1);

	return 0;

}

void citire()
{
	double i;

	fscanf(in, "%lf", &n);

	for(i=1; i<=n; i++)

		fscanf(in, "%lf%lf", &a[1][i], &a[2][i]);

}

void ordonare()
{
	double i, j, aux;

	for(i=1; i<=n; i++)

		for(j=i+1; j<=n; j++)

			if(a[1][i]>a[1][j])
			{
				aux = a[1][j];
				a[1][j] = a[1][i];
				a[1][i] = aux;
				aux = a[2][j];
				a[2][j] = a[2][i];
				a[2][i] = aux;
			}

}

int cauta(int p, int q)
{
	double m=n/2, ls=1, ld=n, gasit=0;

	while(ls<=ld && !gasit)
	{
		m=(ls+ld)/2;

		if(a[1][m] == p && a[2][m] == q)

			gasit = 1;

		else

			if(a[1][m] < p)

				ls = m+1;

			else

				ld = m-1;

	}

	if(gasit)

		return 1;

	return 0;

}