Cod sursa(job #1840780)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 4 ianuarie 2017 20:28:28
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
# include <fstream>
# include <algorithm>
# define DIM 1010
# define x first
# define y second
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
pair<int,int> d[DIM*DIM],v[DIM];
int n,i,j,sol,nr,a,b,k;
int cmmdc(int a,int b){
    while(b){
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
}
int main () {
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i].x>>v[i].y;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++){
            a=v[i].x-v[j].x;
            b=v[i].y-v[j].y;
            if(b<0){
                a=-a;
                b=-b;
            }
            d[++k].x=a;
            d[k].y=b;
            if(a==0){
                d[k].x=0;
                d[k].y=1;
                continue;
            }
            if(b==0){
                d[k].x=1;
                d[k].y=0;
                continue;
            }
            if(a<0)
                a=-a;
            d[k].x/=cmmdc(a,b);
            d[k].y/=cmmdc(a,b);
        }
    sort(d+1,d+k+1);
    nr=1;
    for(i=2;i<=k;i++){
        if(d[i]==d[i-1])
            nr++;
        else{
            sol+=nr*(nr-1)/2;
            nr=1;
        }
    }
    fout<<sol<<"\n";
    return 0;
}