Cod sursa(job #774978)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 6 august 2012 22:20:50
Problema Patrate 3 Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<fstream>
using namespace std;

ifstream f("patrate3.in");
ofstream g("patrate3.out");

int n,i,j,nrc,verif,nrsquare;

long x[1001],y[1001];
char buff[40];
int xa,xb,ya,yb,xplan1,xplan2,yplan1,yplan2;

void sortare_y()
{int change=1,aux;
 while(change==1)
   {change=0;
    for(i=1; i<=n-1; i++)
       if(y[i]>y[i+1])
         {change=1;
          aux=y[i];
          y[i]=y[i+1];
          y[i+1]=aux;
          aux=x[i];
          x[i]=x[i+1];
          x[i+1]=aux;}
  }       
}

void search(int a, int b)
{int end,begin,mij,gasit=0;
 begin=1; end=n;  
 while(begin<end)
  {mij=(end+begin)/2;
   if(x[mij]==a && y[mij]==b)
      break;
   if(y[mij]<b)
      begin=mij+1;
   else
      end=mij-1;}
 if((x[mij]==a && y[mij]==b) || (x[end]==a && y[end]==b))
    verif++;     
}

int get_number()
{long nr=0;
int ng=1;
if(buff[nrc]=='-')
  {ng=-1; nrc++;}
while(buff[nrc]>='0' && buff[nrc]<='9')
  {nr=nr*10+buff[nrc]-'0';
   nrc++;
   if(buff[nrc]=='.')
      nrc++;}
nr*=ng;      
return nr;            
}

int main()
{f>>n;
f.getline(buff,40);
for(i=1; i<=n; i++)
{f.getline(buff,40);
 nrc=0;
 x[i]=get_number();
 nrc++;
 y[i]=get_number();}

sortare_y(); 

nrsquare=0;
for(i=1; i<=n; i++)
  for(j=i+1; j<=n; j++)
  {
     xa=x[j];   ya=y[j];  
     xb=x[i];   yb=y[i]; 
     
     yplan1=ya-(xb-xa);
     yplan2=yb-(xb-xa);
     
     xplan1=xa+(yb-ya);
     xplan2=xb+(yb-ya);
     
     verif=0;
     search(xplan1,yplan1); 
     search(xplan2,yplan2);
     if(verif==2)
       nrsquare++;
  }           
g<<nrsquare/2;   
f.close();
g.close();
return 0;}