Pagini recente » Cod sursa (job #2895776) | Cod sursa (job #2500438) | Cod sursa (job #137621) | Cod sursa (job #3130504) | Cod sursa (job #1303482)
#include <cstdio>
#include <math.h>
#include <list>
#define db (double)
#define md 666013
#define PI 3.14159265
FILE *f,*g;
using namespace std;
struct cp{
float x,y;
cp() {}
cp (float X,float Y)
{
x = X;
y = Y;
}
};
cp v[1010],mij,m1,m2;
double an1,an2;
int n,i,j,res;
list <cp> H[md];
int key_hash(cp val)
{
long long x;
x = val.x * val.y;
if (x<0) x= -x;
return ( x%md);
}
void insert_hash(cp val)
{
int key = key_hash(val);
list<cp>::iterator it;
H[key].push_back(val);
}
double abs(double x)
{
if (x<0) return -x;
return x;
}
bool find_hash(cp val)
{
int key,kk = key_hash(val);
list<cp>::iterator it;
for (key = kk;key<=kk;key++)
if (key<md && key>=0 && !H[key].empty())
for (it = H[key].begin();it!=H[key].end();it++)
if (abs( db (*it).x - val.x) <=0.000001 && abs( db (*it).y - val.y)<= 0.000001)
return true;
return false;
}
int main()
{
f=fopen("patrate3.in","r");
g=fopen("patrate3.out","w");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(f,"%f%f",&v[i].x,&v[i].y);
insert_hash(v[i]);
}
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
{
mij = cp( db (db v[i].x+v[j].x)/2 , db (db v[i].y + v[j].y)/2);
m1.x = db -(db v[i].y-mij.y) + mij.x;
m1.y = db (db v[i].x-mij.x) + mij.y;
m2.x = db (db v[i].y-mij.y) + mij.x;
m2.y = db -(db v[i].x-mij.x) + mij.y;
if (find_hash(m1) == true && find_hash(m2) == true)
{
res++;
}
}
fprintf(g,"%d",res/2);
return 0;
}