Cod sursa(job #1047229)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 4 decembrie 2013 02:34:16
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <cstdio>
#define NMAX 500600
FILE *f,*g;
using namespace std;

void quickSort(double arr[], long left, long right){

      long i = left, j = right;
      double tmp;
      double pivot = arr[(left + right) / 2];
      while (i <= j)
      {
            while (arr[i] < pivot)
                  i++;
            while (arr[j] > pivot)
                  j--;
            if (i <= j)
            {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  i++;
                  j--;
            }
      }
      if (left < j)
            quickSort(arr, left, j);
      if (i < right)
            quickSort(arr, i, right);
}


int main(){
    f=fopen("trapez.in","r");
    g=fopen("trapez.out","w");
    long N,i,j;
    long A[1001][2];
    double pante[NMAX];
    long k=0;
    fscanf(f,"%ld",&N);
    for(i=1;i<=N;i++)
    {
        fscanf(f,"%ld%ld",&A[i][0],&A[i][1]);
    }

    for(i=1;i<N;i++)
    {
        for(j=i+1;j<=N;j++)
        {
            k++;
            if(A[j][0]!=A[i][0])
            {
                pante[k]=((A[j][1]-A[i][1])*1.0000/(A[j][0]-A[i][0]));
            }
            else
            {
                pante[k]= 2.23132;
            }
        }
    }
    quickSort(pante,1,k);
    long s=1,suma=0;
    for(i=1;i<k;i++)
    {
        if(pante[i]==pante[i+1])
        {
            s++;
        }
        else
        {
            suma=suma+s*(s-1)/2;
            s=1;
        }
    }
    suma=suma+s*(s-1)/2;
    fprintf(g,"%ld",suma);
    return 0;
}