Cod sursa(job #1356177)

Utilizator Juve45UAIC Alexandru Ionita Juve45 Data 23 februarie 2015 11:27:08
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#define DMAX 1020
#define x first
#define y second
#define pi pair<int, int>
using namespace std;

int n, ans,a, b;

struct point
{
    int x, y;

    bool operator()(const point &a, const point &b)
    {
        return a.x*b.y<a.y*b.x;
    }


}pl[DMAX];

map<pi, int> m;

vector <point> v;

int main()
{
    freopen("trapez.in", "r", stdin);
    freopen("trapez.out", "w", stdout);

    //freopen("in.txt", "r", stdin);

    scanf("%i", &n);

    for(int i=1;i<=n;i++)
    {
        scanf("%i %i", &a, &b);
        point p;
        p.x=a;
        p.y=b;
        pl[i]=p;
    }

    for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++)
    {
        int X=abs(pl[i].x-pl[j].x);
        int Y=abs(pl[i].y-pl[j].y);

//        int g=__gcd(X, Y);
//        X/=g;
//        Y/=g;

        point l;
        l.x=X;
        l.y=Y;

        v.push_back(l);

    }

    sort(v.begin(), v.end(),point());
    int k=1;
    for(int i=1;i<v.size();i++)
    {
        if(v[i].x*v[i-1].y == v[i].y*v[i-1].x)
            k++;
        else{
        ans+=(k*(k-1)/2);
        k=1;
        }
    }
    ans+=(k*(k-1)/2);
    cout<<ans<<'\n';
    return 0;
}