Cod sursa(job #559195)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 17 martie 2011 17:53:55
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
FILE*fin,*fout;



int i,j,n,t,k,nr;
double xm,ym,y1,x2,l,y2;
struct p{
double x,y;

}a[1501];
int cmp(const void*a,const void*b){
if((*(p*)a).x==(*(p*)b).x){
	       return (*(p*)a).y-(*(p*)b).y;
}

return (*(p*)a).x-(*(p*)b).x;

}

int caut (int p,int u){
   int m,k,ok;
   while(p<=u){ ok=1;
	 m=(p+u)/2;
	 if(a[m].x-x2<=0.001){
	 if(a[m].y-y2<=0.001){ return 1;}
	 k=m+1;
		while(a[k].x-a[m].x<=0.001&&k<=n){
		if(a[k].y-y2<=0.001){return 1;}
		k++;}
	     k=m-1;
		while(a[k].x-a[m].x<=0.001&&k>1){
		if(a[k].y-y2<=0.001){return 1;}
		k--;}

	 }
	 else if(a[m].x>x2){u=m-1;}
	 else if(a[m].x<x2){p=m+1;}

   }

return 0;
}

int abs2(int x){
if(x<0){return -x;}
else{return x;}
}

int main(){
fin=fopen("triang.in","r");
fout=fopen("triang.out","w");
fscanf(fin,"%d ",&n);
for(i=1;i<=n;i++){
fscanf(fin,"%lf %lf",&a[i].x,&a[i].y);

}
 qsort(a+1,n,sizeof(p),cmp);
 for(i=1;i<=n;i++){
    for(j=i+1;j<=n;j++){
    xm=(a[i].x+a[j].x)/2;
    ym=(a[j].x+a[i].y)/2;
	l=(a[j].x-a[i].x)*(a[j].x-a[i].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y);
      x2=xm+(sqrt(l)*sqrt(15))/5;
      y2=ym-(sqrt(l)*sqrt(15))/10;
      y2=abs2(y2);
	      if(caut(j+1,n)==1){nr++;}

    }

 }
  fprintf(fout,"%d",nr);
return 0;
}