Cod sursa(job #1645915)

Utilizator lauratalaatlaura talaat lauratalaat Data 10 martie 2016 14:19:29
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
struct bine { int x ; int y ;};
bine v[1001],panta[1001];
bool sortare ( bine a , bine b ){
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}
int abs ( int a){
    if(a<0)
        return -a;
    return a;
}
int cmmdc ( int a , int b ){
    int r,aux;
    if(a>b){
        aux=a;
        a=b;
        b=aux;
    }
    while(b!=0){
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
int main(){
    int n,i,k,j,l,s=0,x1,y1,pa;
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d%d",&v[i].x,&v[i].y);
    k=0;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++){
            x1=v[i].x-v[j].x;
            y1=v[i].y-v[j].y;
            pa=cmmdc(abs(x1),abs(y1));
            k++;
            panta[k].x=x1/pa;
            panta[k].y=y1/pa;
        }
    sort(panta+1,panta+k+1,sortare);
    l=1;
    for(i=1;i<k;i++)
        if(panta[i].x==panta[i+1].x&&panta[i].y==panta[i+1].y)
            l++;
        else{
            s=s+l*(l-1)/2;
            l=1;
        }
    s=s+l*(l-1)/2;
    printf("%d\n",s);
    return 0;
}