Cod sursa(job #1388594)

Utilizator kagy85Kolumban Antal kagy85 Data 15 martie 2015 16:17:29
Problema Trapez Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 1001

typedef struct
{
    long x, y;
} point;

double v[MAXN*MAXN];
unsigned long vnr; //a bt-ben lvo elemek szama
point a[MAXN];
unsigned short n;
unsigned long long o=0; //ennyi trapezt kaptunk

int d_comp(const void * pv1, const void * pv2)
{
    double *pd1=((double *)pv1), *pd2=((double *)pv2);

    return (*pd1)>(*pd2) ? 1 : ((*pd1)==(*pd2) ? 0 : -1);
}

int main()
{
    FILE * fi, * fo;
    unsigned long i, j, t;

    fi=fopen("trapez.in", "rt");
    fo=fopen("trapez.out", "wt");
    fscanf(fi, "%hu", &n);
    vnr=0;
    o=0;
    for (i=0; i!=n; i++)
    {
        fscanf(fi, "%ld%ld", &a[i].x, &a[i].y);
        for (j=0; j!=i; j++) //facem dreptele
            if ((a[i].x != a[j].x) || (a[i].y != a[j].y))
            {
                v[vnr]=((double)a[i].y-a[j].y)/(a[i].x-a[j].x);
                vnr++;
            }
    }
    qsort(v, vnr, sizeof(double), &d_comp);
    t=0;
    for (i=1; i<vnr; i++)
    {
        if (v[i-1]==v[i])
            t++;
        else
            if (t!=0)
            {
                o+=((t*(t+1))/2);
                t=0;
            }
    }
    if (t!=0) //meg lehet a ciklus vegen is egy trapez
        o+=((t*(t+1))/2);
    fprintf(fo, "%llu", o); //es meg is vagyunk
    fclose(fi);
    fclose(fo);

    return 0;
}