Cod sursa(job #131963)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 4 februarie 2008 20:04:10
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 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;   
}