Cod sursa(job #97831)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 9 noiembrie 2007 00:32:34
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <math.h>
#include <fstream.h>
//using namespace std;
int n;
float x[1001],y[1001];
void citire(){
ifstream fin("patrate3.in");
fin>>n;
for (int i=0;i<n;i++)
   fin>>x[i]>>y[i];
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]){
   float 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 egal(int t,float a,float b){
int u=t;
while (x[u]==a){
   if (y[u]==b)
     return 1;
     u--;}

while (x[t]==a){
  if (y[t]==b)
     return 1;
     t++;}
return 0;
}

float binar(float a,float b,int p,int u){
if (p>u)
  return 0;
   int m=(p+u)/2;
if  (x[m]==a)
  if (egal(m,a,b))
     return 1;
if (x[m]<a)
    return binar(a,b,m+1,u);
else
  if (x[m]>a)
     return binar(a,b,p,m-1);
 return 0;
}

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;
}