Cod sursa(job #588812)

Utilizator biroBiro Alexandru biro Data 9 mai 2011 18:06:26
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <algorithm>

using namespace std;

double abbs(double A) {
  if (A<0)
    return -A ;
 return A ;
}

struct punct{
  int x;
  int y;
};

int cmp (double A , double B) {
  return A>B ;
}

punct v[1001];
double p[1000009];
int cnt,cont=1;
int rez,n;

int main(){
  freopen("trapez.in","r",stdin);
  freopen("trapez.out","w",stdout);

  scanf("%d",&n) ;

  for(int i=1;i<=n;++i) {
    scanf("%d%d",&v[i].x,&v[i].y);
  }

  int nrx=0 ;
  int nry=0 ;

  for(int i=1;i<n;++i) {
    for(int j=i+1;j<=n;++j) {
      if (v[i].x==v[j].x) {
         nrx++ ;
      }
    if (v[i].y==v[j].y) {
              nry++ ;
      }
      else if (v[i].x!=v[j].x) {
        p[++cnt]=(double)(v[j].y-v[i].y)/(v[j].x-v[i].x);
        p[cnt]=abbs(p[cnt]) ;
      }
  }
  }
  sort(p+1,p+cnt+1,cmp) ;

  rez+=nrx*(nrx-1)/2 ;
  rez+=nry*(nrx-1)/2 ;

 for(int i=2;i<=cnt;++i) {
   if(p[i]==p[i-1])
      cont++;
    else {
      rez+=cont*(cont-1)/2 ;
      cont=1;
    }
  }
       rez+=cont*(cont-1)/2 ;
  printf("%d",rez) ;

  return 0 ;
}