Pagini recente » Cod sursa (job #3178581) | Cod sursa (job #2917244) | Cod sursa (job #2555983) | Cod sursa (job #3038872) | Cod sursa (job #16126)
Cod sursa(job #16126)
#include <stdio.h>
#include <math.h>
#define NMAX 1001
#define HMAX 100000
#define eps 1e-4
FILE *f = fopen("patrate3.in","rt"), *g = fopen("patrate3.out","wt");
struct hash{double x,y;
hash *urm;} *vf[HMAX];
double a[NMAX][2];
long int n,i,j,k,x,y,val,sol=0;
void citire()
{
fscanf(f,"%ld",&n);
hash *p;
for (i=1;i<=n;i++)
{
fscanf(f,"%lf %lf",&a[i][0],&a[i][1]);
x=fabs( (long int) a[i][0] );
y=fabs( (long int) a[i][1] );
x=x^y;
p=new hash;
p->x=a[i][0];
p->y=a[i][1];
p->urm=vf[x];
vf[x]=p;
}
}
int find(double x, double y)
{
long int val,x1,y1;
hash *p;
x1=fabs((long int) x);
y1=fabs((long int) y);
val=x1^y1;
p=vf[val];
while (p)
{if ((fabs(p->x-x)<eps)&&(fabs(p->y-y)<eps)) return 1;
p=p->urm;
}
return 0;
}
void check()
{
double x0,y0,x1,y1,mijx,mijy,x2,x3,y2,y3,dx,dy;
int ok1,ok2;
x0=a[i][0];
y0=a[i][1];
x1=a[j][0];
y1=a[j][1];
mijx=(x0+x1)/2;
mijy=(y0+y1)/2;
dx=fabs(mijx-x0);
dy=fabs(mijy-y0);
if (y0<y1) {x2=mijx+dy;
y2=mijx-dx;
x3=mijx-dy;
y3=mijy+dx;
}
else
{
x2=mijx+dy;
y2=mijy+dx;
x3=mijx-dy;
y3=mijy-dx;
}
ok1=find(x2,y2);
ok2=find(x3,y3);
if (ok1&&ok2) sol++;
}
void solve()
{
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
check();
fprintf(g,"%ld",sol);
}
int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}