Cod sursa(job #642515)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 1 decembrie 2011 16:26:23
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <cstdio>
#include <algorithm>

#define NMax 1005
#define x first
#define y second
#define Infinity 2000000001
#define Eps 0.00000000000001

using namespace std;

int N, S, Line;
pair <int, int> P[NMax];
double M[NMax*NMax];

double GetM (int i, int j)
{
    int a=P[j].y-P[i].y;
    int b=P[j].x-P[i].x;
    if (a==0)
    {
        return 0;
    }
    if (b==0)
    {
        return Infinity;
    }
    return (double)((double)a/(double)b);
}

void Read ()
{
    freopen ("trapez.in", "r", stdin);
    scanf ("%d", &N);
    for (int i=1; i<=N; ++i)
    {
        scanf ("%d %d", &P[i].x, &P[i].y);
    }
}

void Print ()
{
    freopen ("trapez.out", "w", stdout);
    printf ("%d\n", S);
}

int main()
{
    Read ();
    for (int i=1; i<N; ++i)
    {
        for (int j=i+1; j<=N; ++j)
        {
            M[++Line]=GetM (i, j);
        }
    }
    sort (M+1, M+Line+1);
    int NM=0;
    for (int i=2; i<=Line; ++i)
    {
        if (M[i]-M[i-1]<Eps)
        {
            ++NM;
        }
        else
        {
            S+=(NM*(NM+1)/2);
            NM=0;
        }
    }
    Print ();
    return 0;
}