Pagini recente » Cod sursa (job #1456978) | Cod sursa (job #401929) | Cod sursa (job #2607882) | Cod sursa (job #224533) | Cod sursa (job #407264)
Cod sursa(job #407264)
#include<stdio.h>
#define infile "patrate3.in"
#define outfile "patrate3.out"
#define nmax 1003
#define modulo 1000003
struct pct
{
double x,y; //coord
}p[nmax]; //punctele
struct lista
{
struct pct a;
int p; //val si poz
} l[nmax];
int h[modulo]; //taela dispersie
int nrl; //nr-ul de elemene din lista
int n; //nr-ul de uncte
int nr; //numarul de patrate
inline int modul(int x)
{
if(x<0) return -x; return x;
}
inline int f(struct pct a)
{
return modul((int)((long long)(a.x*a.y))%modulo);
}
void push(struct pct a)
{
int x=f(a);
nrl++; l[nrl].p=h[x]; l[nrl].a=a; h[x]=nrl;
}
int query(struct pct a)
{
int x=f(a);
int i;
for(i=h[x];i;i=l[i].p)
if(a.x==l[i].a.x && a.y==l[i].a.y)
return 1;
return 0;
}
struct pct pctdr(double dx, double dy, struct pct a)
{
struct pct b;
b.x=a.x-dy;
b.y=a.y+dx;
return b;
}
struct pct pctst(double dx, double dy, struct pct a)
{
struct pct b;
b.x=a.x+dy;
b.y=a.y-dx;
return b;
}
void read()
{
int i;
scanf("%d\n",&n);
for(i=1;i<=n;i++)
scanf("%lf %lf\n",&p[i].x,&p[i].y);
}
void init()
{
int i;
for(i=1;i<=n;i++)
push(p[i]);
}
void sort()
{
int i,j;
struct pct a;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(p[j].y<p[i].y)
a=p[i],p[i]=p[j],p[j]=a;
}
void solve()
{
int i,j;
double dx,dy;
struct pct a,b;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
dx=p[i].x-p[j].x;
dy=p[i].y-p[j].y;
/*
printf("------------------------\n");
printf("(%lf %lf)\n(%lf %lf)\n",p[i].x,p[i].y,p[j].x,p[j].y);
printf("%lf %lf\n",dx,dy);
*/
//la dreapta
a=pctdr(dx,dy,p[i]);
b=pctdr(dx,dy,p[j]);
//printf("(%lf %lf)\n(%lf %lf)\n",a.x,a.y,b.x,b.y);
if(query(a) && query(b))
nr++;
//la stanga
a=pctst(dx,dy,p[i]);
b=pctst(dx,dy,p[j]);
if(query(a) && query(b))
nr++;
}
}
void write()
{
printf("%d\n",nr);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
init();
sort();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}