Cod sursa(job #2457856)

Utilizator denisaaabBucur Denisa Andreea denisaaab Data 18 septembrie 2019 21:28:15
Problema Trapez Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <map>
using namespace std;

ifstream f("trapez.in");
ofstream g("trapez.out");

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

int cmmdc(int a, int b)
{
    if(b==0)
        return a;
    return cmmdc(b,a%b);
}

void simplificare(pair<int,int> &p)
{
    int cmm;
    if(p.first>=0 && p.second>=0)
        cmm=cmmdc(p.first,p.second);
    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 combinari(int x)
{
    return x*(x-1)/2;
}
int main()
{
    f>>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;
            simplificare(panta);
            paralele[panta]++;
        }
    int suma=0;
    for(auto i : paralele)
        suma+=cpmbinari(i.second);
    g<<suma;
    return 0;
}