Cod sursa(job #131965)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 4 februarie 2008 20:08:10
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#define EPS 0.01   
#include <math.h>      
#include <fstream>      
using namespace std;      
int n;   
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;   
   y[i]*=10000;   
}   
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]){      
   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(double a,double b,int m){   
if (fabs(x[m]-a)<=EPS && fabs(y[m]-b)<=EPS)   
  return 1;   
return 0;      
}      
     
int binar(double a,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 && 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]+(y[i]-y[j]),y[j]+(x[j]-x[i]),i,n)==1)      
    if (binar(x[i]+(y[i]-y[j]),y[i]+(x[j]-x[i]),i,n)==1){      
       nr++;      
       break;}      
   }      
return nr;      
}      
int main(){      
citire();      
bule();      
ofstream fout("patrate3.out");      
fout<<numarare()<<"\n";      
fout.close();      
return 0;      
}