Pagini recente » Cod sursa (job #1755016) | Cod sursa (job #1138829) | Cod sursa (job #1295340) | Cod sursa (job #2105720) | Cod sursa (job #1776973)
#include <bits/stdc++.h>
#define per pair<double,double>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define eps 10e-5
#define MOD 7919
using namespace std;
const int NMAX = 1000 + 5;
int n,sol=0;
double x,y;
per a[NMAX];
vector < pair < double , pair < int, int > > > Hash[MOD];
inline double getdist(int i,int j)
{
double x1 = a[i].f,y1=a[i].s,x2=a[j].f,y2=a[j].s;
return (double(sqrt(1.0*(x2-x1)*(x2-x1)+1.0*(y2-y1)*(y2-y1))));
}
inline void add_hash(double dist,int i,int j)
{
int mask = int(dist)%MOD;
Hash[mask].pb(mp(dist,mp(i,j)));
return ;
}
inline bool compara(double d1, double d2)
{
if (abs(d1-d2)<eps) return true;
return false;
}
inline bool check(double dist,int i,int j)
{
int mask = int(dist)%MOD;
for (auto &it : Hash[mask])
if (compara(it.f,dist)==true&&i!=it.s.f&&j!=it.s.s&&i!=it.s.s&&j!=it.s.f)
{
double d1 = getdist(i,it.s.f);
double d2 = getdist(j,it.s.s);
double dd1 = getdist(i,it.s.s);
double dd2 = getdist(i,it.s.f);
if (compara(d1,d2)&&compara(d1,dist))return true;
if (compara(dd1,dd2)&&compara(dd1,dist))return true;
}
return false;
}
int main()
{
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
scanf("%d\n", &n);
for (int i = 1; i<=n; ++i)
{
scanf("%lf %lf",&x, &y);
x+=10000;
y+=10000;
a[i].f = x;
a[i].s = y;
}
for (int i = 1; i<=n; ++i)
for (int j = i + 1; j<=n; ++j)
{
double dist=getdist(i,j);
add_hash(dist,i,j);
}
for (int i = 1; i<=n; ++i)
for (int j = i + 1; j<=n; ++j)
{
double dist = getdist(i , j);
sol += check(dist,i,j);
}
printf("%d\n",sol/2);
return 0;
}