Cod sursa(job #2740377)

Utilizator hhhhhhhAndrei Boaca hhhhhhh Data 12 aprilie 2021 19:00:15
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
typedef long long ll;
typedef pair<int,int> pii;
ll n,lines,ans,nrx,nry;
//unordered_map<ll,ll> f;
vector<ll> vct;
struct point
{
    ll x,y;
} v[1005];
ll getval(point a, point b)
{
    if(a.x<b.x)
        swap(a,b);
    ll x=a.x-b.x;
    ll y=a.y-b.y;
    ll gcd=__gcd(abs(x),abs(y));
    x/=gcd;
    y/=gcd;
    return x*2*1e9+y;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i].x>>v[i].y;
        /*if(normx[v[i].x]==0)
        {
            nrx++;
            normx[v[i].x]=nrx;
        }
        if(normy[v[i].y]==0)
        {
            nry++;
            normy[v[i].y]=nry;
        }
        v[i].x=normx[v[i].x];
        v[i].y=normy[v[i].y];*/
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            vct.push_back(getval(v[i],v[j]));
    sort(vct.begin(),vct.end());
    ll lg=1;
    for(int i=1;i<vct.size();i++)
    {
        if(vct[i]==vct[i-1])
            lg++;
        else
        {
            ans=(ans+lg*(lg-1)/2);
            lg=1;
        }
    }
    ans=(ans+lg*(lg-1)/2);
    /*for(auto i:f)
        ans=(ans+i.second*(i.second-1)/2);*/
    fout<<ans;
    return 0;
}