Cod sursa(job #572814)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 5 aprilie 2011 17:19:21
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
#include<stdlib.h>
FILE*fin,*fout;
double v[1000001];
int  i,j,n,nrt,a[1001],b[1001],nr,px,py;
double abs(double x){
if(x<0){return -x;}
return x;
}
int cmp(const void*a,const void *b){
//if((*(pante*)a).x<0&&(*(pante*)b).x>0){
//return -1;

//if((*(pante*)a).x>0&&(*(pante*)b).x<0){return 1;}
//return (*(pante*)a).x*((*(pante*)b).y)-(*(pante*)b).x*((*(pante*)a).y);
//}


//return (*(pante*)b).x-(*(pante*)a).x;
return *(double*)a-*(double*)b;

}


int main(){
fin=fopen("trapez.in","r");
fout=fopen("trapez.out","w");
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%d %d",&a[i],&b[i]);
}
int ok=1;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
ok=1;
if(b[i]==b[j]){px++;ok=0;}
if(a[i]==a[j]){py++;ok=0;}
if(ok==1)  {
nr++;
v[nr]=(1.0*b[j]-b[i])/(a[j]-a[i]);


}
}


}
		  nrt=0;
int nrt1;
qsort(v+1,nr,sizeof(double),cmp);
for(i=1;i<=nr;i++){
j=i+1;        nrt1=1;
while(abs(v[j]-v[i])<=0.000000000000001){nrt1++;j++;}
nrt=nrt+nrt1*(nrt1-1)/2;
i=j-1;
}
nrt=nrt+px*(px-1)/2;
nrt=nrt+py*(py-1)/2;
fprintf(fout,"%d",nrt);
return 0;
}