Cod sursa(job #2791284)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 30 octombrie 2021 12:27:32
Problema Trapez Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int n,k=1,cont;
int nr;
struct point {int x,y;} p[1010];

long long  nrpz = 0;

struct frac
{
    int num, denom;

    frac(){}

    frac(int  num_l, int denom_l)
    {
        num = num_l;
        denom = denom_l;
    }

    bool operator==(frac b)
    {
        return ((num *b.denom) == (b.num * denom));
    }
};

frac m[500510];

bool fcomp(frac a, frac b)
{
    return ((a.num * b.denom) <(b.num * a.denom));
}

int main()
{
    ifstream f("trapez.in");
    ofstream g("trapez.out");
    f>>n;
    for(int i=1;i<=n;i++) f>>p[i].x>>p[i].y;
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        {
            if(p[i].y - p[j].y == 0)
                nrpz++;
            else
            {
                nr++;
                m[nr]=frac((p[i].x-p[j].x),(p[i].y-p[j].y));
            }
        }

    long long rez = (nrpz*(nrpz-1))/2;

    sort(m+1,m+nr+1, fcomp);
    for(int i=1;i<nr;)
    {
        int j;
        for(j=i+1;m[i] == m[j]; ++j);
        long long nrl = j-i;
        rez += (nrl*(nrl-1)/2);
        i=j;
    }
    g<<rez<<"\n";
}