Cod sursa(job #131974)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 4 februarie 2008 20:24:53
Problema Patrate 3 Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#define EPS 0.01   
#include <math.h>      
#include <fstream>
using namespace std;
int n;   
long double x[1015],y[1015];   
void citire(){   
ifstream fin("patrate3.in");   
fin>>n;   
for (int i=0;i<n;i++)   
{   
   fin>>x[i]>>y[i];   
   x[i]*=10000+100000;   
   y[i]*=10000+100000;   
}   
fin.close();      
}      
void bule(){      
int ok=1,p=n;      
while(ok){      
ok=0;      
p--;      
for (int i=0;i<p;i++)      
   if (x[i]>x[i+1]){      
   long double aux=x[i];   
   x[i]=x[i+1];      
   x[i+1]=aux;      
   aux=y[i];      
   y[i]=y[i+1];      
   y[i+1]=aux;      
   ok=1;      
   }     
   else
     if (x[i]==x[i+1] && y[i]>y[i+1])
     {
   double aux=x[i];
   x[i]=x[i+1];   
   x[i+1]=aux;   
   aux=y[i];   
   y[i]=y[i+1];
   y[i+1]=aux;
   ok=1;
     } 
}      
}      
     
int da(long double a,long double b,int m){   
if (fabs(x[m]-a)<=EPS && fabs(y[m]-b)<=EPS)   
  return 1;   
return 0;      
}      
     
int binar(long double a,long double b,int p,int u){   
if (p>u)      
  return 0;      
int m=(p+u)/2;      
if  (da(a,b,m))      
     return 1;      
if (x[m]<a)
    return binar(a,b,m+1,u);
else
  if (x[m]==a && y[m]<b)
    return binar(a,b,m+1,u);
return binar(a,b,p,m-1);      
}
     
long numarare(){      
long nr=0;      
for (int i=0;i<n-1;i++)      
   for (int j=i+1;j<n;j++){      
      if (binar(x[j]+fabs(y[i]-y[j]),y[j]+(x[j]-x[i]),0,n)==1)
    if (binar(x[i]+fabs(y[i]-y[j]),y[i]+(x[j]-x[i]),0,n)==1){
       nr++;      
       break;}      
   }      
return nr;      
}      
int main(){      
citire();      
bule();      
ofstream fout("patrate3.out");      
fout<<numarare()<<"\n";      
fout.close();      
return 0;      
}