Cod sursa(job #2455717)

Utilizator cristina-criCristina cristina-cri Data 12 septembrie 2019 16:19:39
Problema Trapez Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <cstdio>
#include <map>
#include <algorithm>

using namespace std;

int n;

pair<int, int> p[1005];

pair<int, int>m;

map<pair<int, int>, int> fr;

int cmmdc(int x, int y)
{
    x=abs(x);
    y=abs(y);
    while(y)
    {
        int r=x%y;
        x=y;
        y=r;
    }
    return x;
}

int combin(int n)
{
    return n*(n-1)/2;
}

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

    scanf("%d", &n);

    for(int i=1; i<=n; i++)
    {
        scanf("%d %d", &p[i].first, &p[i].second);
    }

    for(int i=1; i<n; i++)
    {
        for(int j=i+1; j<=n; j++)
        {
            m.first=p[j].second-p[i].second;
            m.second=p[j].first-p[i].first;
            int divCom=abs(cmmdc(m.first, m.second));
            if(m.first<0 && m.second<0)
            {
                m.first*=(-1);
                m.second*=(-1);
            }
            else
            {
                if(m.second<0)
                {
                    m.second*=(-1);
                    m.first*=(-1);
                }
            }
            m.first/=divCom;
            m.second/=divCom;
           // printf("%d %d\n", m.first, m.second);
            fr[{m.first, m.second}]++;
        }
    }

    int sum=0;
    for(auto i:fr)
    {
        sum+=combin(i.second);
    }
    printf("%d", sum);
    return 0;
}