Cod sursa(job #587871)

Utilizator biroBiro Alexandru biro Data 6 mai 2011 12:20:13
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<algorithm>
 
using namespace std;
 
double abbs(double A) {
  if (A<0)
    return -A ;
 return A ;
}
 
struct punct{
  int x;
  int y;
};
 
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) ;
  
  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 ;
}