Cod sursa(job #117074)

Utilizator QbyxEros Lorand Qbyx Data 20 decembrie 2007 16:37:31
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>
#include <stdlib.h>

struct tort{long long szamlalo; long long nevezo;};
struct pont{long long x; long long y;};

tort egyenesek[1000010];
pont pontok[1010];

int hasonlit(const void *egyenes1,const void *egyenes2)
{
    tort a, b;
    long long x;

    a = *(tort*)egyenes1;
    b = *(tort*)egyenes2;

    x = a.szamlalo * b.nevezo - b.szamlalo * a.nevezo;
    if (x < 0) return(-1); else
	if (x > 0) return(1); else return(0);
}

int main()
{
   FILE *f;
   long long i, j, n, k = 0, db, r = 0; 

   f = fopen("trapez.in", "rt");
   fscanf(f, "%lli", &n);
   for (i = 0; i < n; i++)
      fscanf(f, "%lli %lli", &pontok[i].x, &pontok[i].y);
   fclose(f);

   for (i = 0; i < n - 1; i++)
       for (j = i + 1; j < n; j++)
       {
	   egyenesek[k].szamlalo = pontok[j].x - pontok[i].x;
	   egyenesek[k].nevezo = pontok[j].y - pontok[i].y;

	   if (egyenesek[k].nevezo < 0)
	   {
	       egyenesek[k].szamlalo *= -1;
	       egyenesek[k].nevezo *= -1;
	   }
	   k++;
       }
   qsort(egyenesek, n*(n-1)/2, sizeof(tort), hasonlit);
   
   for (i = 0; i <= k; i++)
   {
       db = 1;
       while (egyenesek[i].szamlalo * egyenesek[i + 1].nevezo == 
	       egyenesek[i + 1].szamlalo * egyenesek[i].nevezo && i + 1 < k)
       {
	   db++;
	   i++;
       }
       r += db * (db - 1) / 2;
   }

   f = fopen("trapez.out", "wt");
   fprintf(f, "%lli", r);
   fclose(f);
}