Cod sursa(job #20745)

Utilizator Pharaoh****** Pharaoh Data 22 februarie 2007 00:03:55
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

unsigned long long i,j,n,m,trap;
long long double a[1000000],x[1001],y[1001];

void quick(unsigned long long li,unsigned long long ls)
{
 long i,j;
 long long double x,y;
 i=li; j=ls; x=a[(li+ls)/2];
 while (i<=j)
      {
       while (a[i]>x) i++;
       while (a[j]<x) j--;
       if (i<=j)
	 {
	  y=a[i]; a[i]=a[j]; a[j]=y;
	  i++; j--;
	 }
      }
 if (i<ls) quick(i,ls);
 if (j>li) quick(li,j);
}

int main()
{
 FILE *f=fopen("trapez.in","r");
 fscanf(f,"%ld",&n);
 for (i=1;i<=n;i++)
    fscanf(f,"%ld%ld",&x[i],&y[i]);
 fclose(f);

 long h=0;
// printf("\n");

 for (i=1;i<=n-1;i++)
 for (j=i+1;j<=n;j++)
    if (i != j)
      {
       h++;
       if (x[j]-x[i] == 0)
	 a[h]=0;
	 else if (y[j]-y[i] == 0)
		a[h]=2500000000;
	 else a[h]=(y[j]-y[i])/(x[j]-x[i]);
//       printf("%ld %ld %f\n",i,j,a[h]);
      }

 quick(1,h);
 trap=0;
 for (i=1;i<=h-1;i++)
    if (a[i]==a[i+1])
      trap++;

 FILE *g=fopen("trapez.out","w");
 fprintf(g,"%Lu",trap);
 fclose(g);
 return 0;
 }