Cod sursa(job #2373337)

Utilizator cc4infinityCojocaru Catalin cc4infinity Data 7 martie 2019 13:08:31
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>

using namespace std;
typedef unsigned long long ull;
ifstream fin("trapez.in");
ofstream fout("trapez.out");

ull i,j,x,y,a,b,m,n,poz,rs;
struct coord
{
    int x,y;
}t[1001],tg[1000001];

ull cmmdc(int a,int b)
{
    if (!b) return a;
    return cmmdc(b,a%b);
}

void elem(int a, int b)
{
    int dx=t[a].x-t[b].x,dy=(t[a].y-t[b].y);
    int dv=cmmdc(dx,dy);
    tg[++poz].x=dx/dv;
    tg[poz].y=dy/dv;
}

bool compare(coord a,coord b)
{
    if (a.x>b.x) return 1;
    if (a.x<b.x) return 0;
    return (a.y>b.y);
}

int main()
{
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>t[i].x>>t[i].y;
    for (i=1;i<=n;i++)
        for (j=i+1;j<=n;j++)
        elem(i,j);
    sort(tg+1,tg+1+poz,compare);
    a=1;
    for (i=2;i<=poz;i++)
        if (tg[i].x==tg[i-a].x && tg[i].y==tg[i-a].y) a++;
                 else
                 {
                     rs+=(a-1)*(a)/2;
                     a=1;
                 }
    fout<<rs;
    return 0;
}