Cod sursa(job #2864)

Utilizator raresjuniorSfirlogea Rares raresjunior Data 19 decembrie 2006 16:49:44
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<stdio.h>
#include<stdlib.h>

FILE *f=fopen("trapez.in","r"),*g=fopen("trapez.out","w");
double pante[1000],test;

struct punct{
long x;
long y;
} pct[1001];

int compare_double (const void *a, const void *b)
     {
       const double *da = (const double *) a;
       const double *db = (const double *) b;

       return (*da > *db) - (*da < *db);
     }

unsigned long n,i,j,sol=0;
int main()
{
pante[0]=-2000000005;
fscanf(f,"%ld",&n);
for(i=1;i<=n;fscanf(f,"%ld %ld",&pct[i].x,&pct[i].y),i++);
int nn=0;
for(i=1;i<=n-1;i++)
        for(j=i+1;j<=n;j++)
                {
                nn++;
                if(pct[i].x==pct[j].x)
                        pante[nn]=-2000000001;
                        else
                        {
                        pante[nn]=(double) (pct[j].y-pct[i].y) / (double) (pct[j].x-pct[i].x);
                        }
                }
qsort (pante, nn+1 , sizeof (double), compare_double);
n=1;
test=pante[1];
for(i=2;i<=nn;i++)
        {
        if(test==pante[i])
                n++;
                else
                {
                if(n!=1)
                        sol+=(n*(n-1)/2);
                test=pante[i];
                n=1;
                }
        }
fprintf(g,"%ld",sol);
fclose(f);
fclose(g);
return 0;
}