Cod sursa(job #145339)

Utilizator katakunaCazacu Alexandru katakuna Data 28 februarie 2008 18:58:16
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include<stdio.h>

struct patrate {float a,b;};
patrate v[1006],aux;

float mijx,solx,soly,mijy,x,y;

int ok,n,i,j,nr;



int caut (float a,float b){

int p,u,mij;

p=1;
u=n;

  while(p<=u){

   mij=(p+u)/2;


      if( a<=v[mij].a|| ( (v[mij].a-a>=0&&v[mij].a-a<=0.00001)  &&  (a-v[mij].a<=0&&a-v[mij].a>=-0.00001 ) ))
      u=mij-1;

      else p=mij+1;


  }


  if( ( v[p].a-a>=0&&v[p].a-a<=0.00001 ) && ( a-v[p].a<=0&&a-v[p].a>=-0.00001  )  ){
  i=p;

    while( ( v[i].a-a>=0&&v[i].a-a<=0.00001 ) && ( a-v[i].a<=0&&a-v[i].a>=-0.00001  )     ){

       if(( v[i].b-b>=0&&v[i].b-b<=0.00001 ) && ( b-v[i].b<=0&&b-v[i].b>=-0.00001  )  ){
       break;
       }

    i++;
    }



    if(( v[i].b-b>=0&&v[i].b-b<=0.00001 ) && ( b-v[i].b<=0&&b-v[i].b>=-0.00001  )  )
    return 1;

  }







return 0;
}











int main(){

FILE *f=fopen("patrate3.in","r");
fscanf(f,"%d",&n);

  for(i=1;i<=n;i++){
  fscanf(f,"%f",&v[i].a);


  fscanf(f,"%f",&mijy);
  v[i].b=mijy;
  }

fclose(f);


ok=1;

 while(ok){
 ok=0;

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

    if(v[i].a>v[i+1].a){
    aux=v[i];
    v[i]=v[i+1];
    v[i+1]=aux;
    ok=1;
    }

   /* else{

      if(v[i].a==v[i+1].a){

	 if(v[i].b>v[i+1].b){
	 aux=v[i];
	 v[i]=v[i+1];
	 v[i+1]=aux;
	 ok=1;
	 }


      }



    }*/



   }


 }



  for(i=n;i>1;i--){
    for(j=i-1;j>=1;j--){

      //if(v[i].a<v[j].b){


	if(v[i].b<v[j].b||( v[i].b-v[j].b>=0&&v[i].b-v[j].b<=0.00001 ) && ( v[j].b-v[i].b<=0&&v[j].b-v[i].b>=-0.00001  )){

	 mijx=-((v[i].a-v[j].a)/2)+v[i].a;
	 mijy=((v[j].b-v[i].b)/2)+v[i].b;
	 x=-mijx+v[i].a;
	 y=mijy-v[i].b;

	 solx=mijx+y;
	 soly=mijy+x;

	 if(caut(solx,soly)){

	 solx=mijx-y;
	 soly=mijy-x;

	  if(caut(solx,soly))nr++;

	 }



	}


	else{

	}

     // }

     /* else{

	if(v[i].b<v[j].b){

	}

	else{

	}


      }*/


    }

  }


FILE *g=fopen("patrate3.out","w");
fprintf(g,"%d",nr);
fclose(g);




return 0;
}