Cod sursa(job #1349417)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 20 februarie 2015 10:44:57
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 1023
FILE *fin, *fout;
int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b, a%b);
}
int abs(int a)
{
    if(a < 0) return -a;
    return a;
}
struct punct
{
       int x;
       int y;
} arr[NMAX], v[2*NMAX];
int n, temp, pos = 0, x1, y1, count, sum;
bool comp(punct a, punct b)
{
     if(a.x < b.x) return 1;
     if(a.x > b.x) return 0;
     if(a.y < b.y) return 1;
     return 0;
}
int main()
{
    fin = freopen("trapez.in", "r", stdin);
    fout =freopen("trapez.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 0; i< n; i++)
    {
            scanf("%d %d", &arr[i].x, &arr[i].y);
    }
    for(int i = 0; i< n; i++)
    {
            for(int j = i+1; j< n; j++)
            {
                    v[pos].x = arr[i].x - arr[j].x;
                    v[pos].y = arr[i].y - arr[j].y;
                    temp = gcd(v[pos].x, v[pos].y);
                    v[pos].x /= temp;
                    v[pos].y /= temp;
                    pos++;
            }
    }
    std::sort(v, v+pos, comp);
    x1 = v[0].x;
    y1 = v[0].y;
    count = 1;
    for(int i = 1; i< pos; i++)
    {
            if(v[i].x == x1 && v[i].y == y1)
            {
                      count++;
            }
            else
            {
                sum+=count*(count-1)/2;
                count =1;
                x1 = v[i].x;
                y1 = v[i].y;
            }
    }
    printf("%d\n", sum);
    fclose(fin);
    fclose(fout);
    return 0;
}