Pagini recente » Cod sursa (job #1786654) | Cod sursa (job #2956930) | Cod sursa (job #2830253) | Cod sursa (job #358140) | Cod sursa (job #2354895)
#include <bits/stdc++.h>
using namespace std;
const double eps=1.e-14;
struct dd
{
int x,y;
};
dd a[10005];
double cmp(dd a,dd b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
int main()
{
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
int n,i;
scanf("%d",&n);
int sum=0,j;
double x,y;
for(i=1;i<=n;i++)
{scanf("%f%f",&x,&y);
a[i].x=ceil(x*10000);a[i].y=ceil(y*10000);}
sort(a+1,a+n+1,cmp);
for(i=1;i<n;i++)
{
for(j=(i+1);j<=n;j++)
{
dd xc,xd;
int ok=1;
int x1=a[j].x-a[i].x,y1=a[j].y-a[i].y;
xc.x=a[j].x+y1;
xc.y=a[j].y-x1;
int st=1,dr=n;
int l=0;
while(st<=dr)
{
int med=(st+dr)/2;
if(a[med].x<xc.x)st=med+1;
if(a[med].x>xc.x)dr=med-1;
if(a[med].x==xc.x)
{
if(a[med].y<xc.y){st=med+1;continue;}
if(a[med].y>xc.y){dr=med-1;continue;}
l=1;
break;
}
}
int l1=0;
xd.x=a[i].x+y1;
xd.y=a[i].y-x1;
st=1,dr=n;
while(st<=dr)
{
int med=(st+dr)/2;
if(a[med].x<xd.x)st=med+1;
if(a[med].x>xd.x)dr=med-1;
if(a[med].x==xd.x)
{
if(a[med].y<xd.y){st=med+1;continue;}
if(a[med].y>xd.y){dr=med-1;continue;}
l1=1;
break;
}
}
sum+=l*l1;
l=0,l1=0;
ok=1;
xc.x=a[j].x-y1;
xc.y=a[j].y+x1;
st=1,dr=n;
l=0;
while(st<=dr)
{
int med=(st+dr)/2;
if(a[med].x<xc.x)st=med+1;
if(a[med].x>xc.x)dr=med-1;
if(a[med].x==xc.x)
{
if(a[med].y<xc.y){st=med+1;continue;}
if(a[med].y>xc.y){dr=med-1;continue;}
l=1;
break;
}
}
xd.x=a[i].x-y1;
xd.y=a[i].y+x1;
l1=0;
st=1,dr=n;
while(st<=dr)
{
int med=(st+dr)/2;
if(a[med].x<xd.x)st=med+1;
if(a[med].x>xd.x)dr=med-1;
if(a[med].x==xd.x)
{
if(a[med].y<xd.y){st=med+1;continue;}
if(a[med].y>xd.y){dr=med-1;continue;}
l1=1;
break;
}
}
sum+=l*l1;
ok=1;
}
}
printf("%d\n",sum/4);
return 0;
}