Cod sursa(job #1259779)

Utilizator adnionutCojocaru Ionut adnionut Data 10 noiembrie 2014 16:17:32
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
/*
Punctaj final pe sursa curenta: 100p
*/
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;

ifstream fin("trapez.in");
ofstream fout("trapez.out");

#define Nmax 1000
#define EPS 0.0000000000001
 
struct punct {int x, y;} v[Nmax];

struct panta
{
    double x;
    friend bool operator <(panta p1, panta p2)
    {
        return p1.x < p2.x;
    }
    friend bool operator ==(panta p1, panta p2)
    {
        return abs(p1.x - p2.x) < EPS;
    }
} p[Nmax * Nmax], aux;
 
int main()
{
    int i, j, n, k = 0, OX = 0, OY = 0;
    long long nr, sol = 0;
    fin >> n;
    for(i = 0; i < n; ++i)
    {
        fin >> v[i].x >> v[i].y;
        for(j = 0; j < i; ++j)
        {
            if(v[i].x == v[j].x) ++OY;
            else if(v[i].y == v[j].y) ++OX;           
            else
            {
                p[k++].x = 1.0 * (v[i].y - v[j].y) / (v[i].x - v[j].x);
            }
        }
    }
    sort(p, p + k);
     
    aux.x = 0;
    for(i = 0; i < k;)
    {
        aux = p[i]; nr = 0;
        while(p[i] == aux && i < k) ++i, ++nr;
        sol += nr * (nr - 1) / 2;
    }
    sol += OX * (OX - 1) / 2;
    sol += OY * (OY - 1) / 2;
     
    fout << sol << '\n';
    return 0;
}