Pagini recente » Cod sursa (job #2334541) | Cod sursa (job #527271)
Cod sursa(job #527271)
#include <stdio.h>
#include <math.h>
#include <algorithm>
#define NMAX 1505
#define pdd pair <double,double>
#define a first
#define b second
#define prec 0.0001
using namespace std;
int n,rez;
pdd A[NMAX],x,y;
void read()
{
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
scanf("%lf%lf",&A[i].a,&A[i].b);
}
inline double modul(double x)
{
return x<0 ? -x : x;
}
inline int egal(double x,double y)
{
return modul(x-y)<prec;
}
void cbin(int start,pdd x)
{
int j,i,step;
for (step=1; step<=n; step<<=1);
for (i=start; step; step>>=1)
if (i+step<=n && A[i+step].a-x.a<-prec)
i+=step;
i++;
for (j=i; j<=n && egal(A[j].a,x.a); j++)
if (egal(A[j].b,x.b))
rez++;
}
void solve()
{
int i,j;
double val1,val2,val3=sqrt(3)/2;
for (i=1; i<=n; i++)
{
for (j=i+1; j<=n; j++)
{
val1=0.5; val2=val3;
x.a=A[i].a+(A[j].a-A[i].a)*val1-(A[j].b-A[i].b)*val2;
x.b=A[i].b+(A[j].a-A[i].a)*val2+(A[j].b-A[i].b)*val1;
cbin(j,x);
val2=-val2;
y.a=A[i].a+(A[j].a-A[i].a)*val1-(A[j].b-A[i].b)*val2;
y.b=A[i].b+(A[j].a-A[i].a)*val2+(A[j].b-A[i].b)*val1;
cbin(j,y);
}
}
}
int main()
{
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
read();
sort(A+1,A+n+1);
solve();
printf("%d\n",rez);
return 0;
}