Cod sursa(job #1356108)

Utilizator Juve45UAIC Alexandru Ionita Juve45 Data 23 februarie 2015 10:44:29
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;
}pl[DMAX];

map<pi, int> m;

vector <pi> 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);
        if(X&&Y)
        {
        int g=__gcd(X, Y);
        X/=g;
        Y/=g;
        }
        else{
            if(X==0)
                Y=1;
            if(Y==0)
                X==1;
        }
        pair<int, int> l;
        l.x=X;
        l.y=Y;

        if(m.find(l)==m.end())
        {
            m[l]=1;
            v.push_back(l);
        }
        else{
            m[l]++;
        }
    }

    for(int i=0;i<v.size();i++)
    {
        int k=m[v[i]]-1;
        ans+=(k*(k+1)/2);
    }
    cout<<ans;
    return 0;
}