Cod sursa(job #2073305)

Utilizator ScarymovieMocanu Alexandru Scarymovie Data 22 noiembrie 2017 22:10:25
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include<bits/stdc++.h>
using namespace std;

struct punct{int Abs,Ord;};
vector<punct> v,pante;
int cmmdc(int a,int b)
{
    if(b==0) return a;
    return cmmdc(b,a%b);
}
int cmp(punct a,punct b)
{
    if(a.Abs==b.Abs) return a.Ord<b.Ord;
    return a.Abs<b.Abs;
}
int main()
{
    ifstream f("trapez.in");
    ofstream g("trapez.out");
    int n,i,j;
    f>>n;v.resize(n);
    for(i=0;i<n;++i)
        {
            f>>v[i].Abs>>v[i].Ord;
            for(j=0;j<i;++j)
                {
                    punct aux;
                    aux.Abs=v[j].Abs-v[i].Abs;
                    aux.Ord=v[j].Ord-v[i].Ord;
                    if(aux.Abs*aux.Ord<0) {aux.Abs=-abs(aux.Abs);aux.Ord=abs(aux.Ord);}
                    else {aux.Abs=abs(aux.Abs);aux.Ord=abs(aux.Ord);}
                    int x=cmmdc(aux.Abs,aux.Ord);
                    aux.Abs/=x;aux.Ord/=x;
                    pante.push_back(aux);
                }
        }
    sort(pante.begin(),pante.end(),cmp);
    long long nr=0;
    for(i=0;i<=pante.size();)
        {
            j=i;
            while(j<=pante.size() && pante[i].Abs==pante[j].Abs && pante[i].Ord==pante[j].Ord)++j;
            nr+=(j-i)*(j-i-1)/2;
            i=j;
        }
    g<<nr<<'\n';
    return 0;
}