Cod sursa(job #577662)

Utilizator cat_red20Vasile Ioana cat_red20 Data 10 aprilie 2011 14:54:10
Problema Trapez Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#include<stdlib.h>
FILE *fin,*fout;

long n,i,nrx,nry,j,p;
long long sol;
struct punct{
  long x;
  long y;

}v[1001],r[500000];

int cmp(const void *a,const void *b){
long int c;

  c=(*(punct *)a).y*(*(punct *)b).x-(*(punct *)b).y*(*(punct *)a).x;

  if(c<0)
  return -1;
  if(c==0)
  return 0;
  if(c>0)
  return 1;
}

int main(){

 fin=fopen("trapez.in","r");
 fout=fopen("trapez.out","w");
 fscanf(fin,"%ld",&n);

 for(i=1;i<=n;i++){

    fscanf(fin,"%ld %ld",&v[i].x,&v[i].y);
 }
 for(i=1;i<=n;i++){

   for(j=i+1;j<=n;j++){

      if(v[i].y==v[j].y){

	 nry++;
      }
      else
      if(v[i].x==v[j].x)
      nrx++;
      	else{

	r[++p].y=v[i].y-v[j].y;
	r[p].x=v[i].x-v[j].x;

	if(r[p].x<0){
	   r[p].y=-r[p].y;
	   r[p].x=-r[p].x;
	}


      }
   }

 }

 qsort(r+1,p,sizeof(punct),cmp);

 for(i=1;i<=p;i++){
   for(j=i+1;j<=p;j++){

     if(r[i].x*r[j].y==r[i].y*r[j].x){

	 sol++;
     }
     else
	 break;
   }
 }
 sol+=(long long)nrx*(nrx-1)/2;
 sol+=(long long)nry*(nry-1)/2;

 fprintf(fout,"%lld",sol);
return 0;}