Pagini recente » Cod sursa (job #1872114) | Cod sursa (job #1610574) | Cod sursa (job #259158) | Cod sursa (job #3248166) | Cod sursa (job #1143074)
#include<fstream>
#include<iostream>
#include<iomanip>
#include<math.h>
#include<algorithm>
using namespace std;
#define max_n 1010
#define eps 0.00001
#define tpdt float
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int n , nr;
tpdt x , y;
tpdt x1 , y12 , x2 , y2 , dx , dy , mij_x , mij_y ;
struct point{
tpdt x , y;
bool operator == ( point b ){
return fabs((*this).x - b.x) <= eps && fabs((*this).y - b.y) <= eps;
}
bool operator < ( point b ){
return (*this).x == b.x ? (*this).y < b.y : (*this).x < b.x;
}
};
point V[max_n];
point make_point( tpdt x , tpdt y ){
point p;
p.x = x; p.y = y;
return p;
}
void read(){
f>>n;
for( int i = 1 ; i <= n ; i++ ){
f>>V[i].x>>V[i].y;
}
}
bool cmp( point a , point b ){
return a.x == b.x ? a.y < b.y : a.x < b.x;
}
bool find( point p ){
int st = 1 , dr = n;
int mid = (st + dr) / 2;
while( st <= dr ){
if( V[mid] == p )
return true;
if( V[mid] < p )
st = mid + 1;
else
dr = mid - 1;
mid = (st + dr) / 2;
}
return false;
}
int main(){
read();
sort( V + 1 , V + n + 1 , cmp );
for( int i = 1 ; i <= n ; i++ ){
for( int j = i + 1 ; j <= n ; j++ ){
mij_x = (V[i].x + V[j].x) / 2;
mij_y = (V[i].y + V[j].y) / 2;
dx = fabs(mij_x - V[i].x);
dy = fabs(mij_y - V[i].y);
if( V[i].y < V[j].y ){
x1 = mij_x - dy;
y12 = mij_y + dx;
x2 = mij_x + dy;
y2 = mij_y - dx;
}
else{
x1 = mij_x - dy;
y12 = mij_y - dx;
x2 = mij_x + dy;
y2 = mij_y + dx;
}
if( find( make_point(x1 , y12) ) && find( make_point(x2 , y2) ) ){
nr++;
}
}
}
g<<nr/2<<"\n";
return 0;
}