Cod sursa(job #1803108)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 10 noiembrie 2016 22:57:07
Problema Trapez Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#define MAXP 500010
#define MAXN 1002
double panta[MAXP];

int pozitie(int i, int j){

    int mod = 1;
    double aux;

    while(i < j){

        if(panta[i] > panta[j]){

            aux = panta[i];
            panta[i] = panta[j];
            panta[j] = aux;
            mod = 1 - mod;
        }
        i = i + mod;
        j = j + mod - 1;
    }

    return i;
}

void divide(int i, int j){

    int k;

    if(i < j){
        k = pozitie(i,j);
        divide(i,k - 1);
        divide(k + 1,j);
    }
}


int main()

{
    int n, i, j, count, rezultat;

    int x[MAXN], y[MAXN];
    FILE *f, *g;

    f=fopen("trapez.in","r");
    g=fopen("trapez.out","w+");
    fscanf(f,"%d",&n);

    for(i = 1;i <= n; ++i)
        fscanf(f,"%d %d",&x[i],&y[i]);

    count = 0;
    for(i = 1;i < n; ++i)
        for(j = i + 1;j <= n; ++j){
            count++;
            if(x[i] == x[j])
                panta[count] = 2000000000;
            else
            panta[count] = ((double)(y[j] - y[i]) / (double)(x[j] - x[i]));
            }

    divide(1,count);

    i = 1;
    rezultat = 0;

    while(i <= count){

        j = 1;
        while(panta[i] == panta[i + 1]){
            ++i;
            ++j;
        }
        rezultat = rezultat + (j * (j - 1)) / 2;
        ++i;
    }

    fprintf(g,"%d",rezultat);
    return 0;


}