Cod sursa(job #2455721)

Utilizator MaraPMara P MaraP Data 12 septembrie 2019 16:29:04
Problema Trapez Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <map>
using namespace std;

ifstream fin("trapez.in");
ofstream fout("trapez.out");

map<pair<int,int>, int> paralele;
int n;
struct punct
{
    int x,y;
    void citire()
    {
        fin>>x>>y;
    }
}Puncte[1001];

int cmmdc(int a, int b)
{
    while(b)
    {
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
}

void simplifica(pair<int,int> &p)
{
    int cmm;
    if(p.first<0&&p.second<0)
    {
        p.first*=-1;
        p.second*=-1;
        cmm=cmmdc(p.first,p.second);
    }
    else if(p.first<0)
        cmm=cmmdc(p.first*-1,p.second);
    else if(p.second<0)
    {
        cmm=cmmdc(p.first,p.second*-1);
        p.second*=-1;
        p.first*=-1;
    }
    p.first/=cmm;
    p.second/=cmm;
}
int cmb(int x)
{
    return x*(x-1)/2;
}
void solve()
{
    fin>>n;
    for(int i=0;i<n;i++)
        Puncte[i].citire();
    for(int i=0;i<n;i++)
        for(int j=i+1;j<n;j++)
        {
            pair<int,int> panta;
            panta.first=Puncte[i].y-Puncte[j].y;
            panta.second=Puncte[i].x-Puncte[j].x;
            simplifica(panta);
            paralele[panta]++;
        }
    int suma=0;
    for(auto i : paralele)
        suma+=cmb(i.second);
    fout<<suma;
}
int main()
{
    solve();
    return 0;
}