Pagini recente » Cod sursa (job #1668785) | Cod sursa (job #2100195) | Cod sursa (job #1797341) | Cod sursa (job #2645727) | Cod sursa (job #2354947)
#include <bits/stdc++.h>
using namespace std;
const double eps=1.e-4;
struct dd
{
double x,y;
};
dd a[10005];
bool cmp(dd a,dd b)
{
if(fabs(a.x-b.x)<=eps)
{
if(a.y-b.y>eps)return 0;
return 1;
}
if(a.x-b.x>eps)return 0;
return 1;
}
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("%lf%lf",&x,&y);
a[i].x=x;a[i].y=y;}
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;
double 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<(-1)*eps){st=med+1;continue;}
if(a[med].x-xc.x>eps){dr=med-1;continue;}
if(a[med].y-xc.y<(-1)*eps){st=med+1;continue;}
if(a[med].y-xc.y>eps){dr=med-1;continue;}
l=1;
break;
}
int l1=0;
if(l==1)
{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<(-1)*eps){st=med+1;continue;}
if(a[med].x-xd.x>eps){dr=med-1;continue;}
if(a[med].y-xd.y<(-1)*eps){st=med+1;continue;}
if(a[med].y-xd.y>eps){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<(-1)*eps){st=med+1;continue;}
if(a[med].x-xc.x>eps){dr=med-1;continue;}
if(a[med].y-xc.y<(-1)*eps){st=med+1;continue;}
if(a[med].y-xc.y>eps){dr=med-1;continue;}
l=1;
break;
}
xd.x=a[i].x-y1;
xd.y=a[i].y+x1;
l1=0;
if(l==1)
{st=1,dr=n;
while(st<=dr)
{
int med=(st+dr)/2;
if(a[med].x-xd.x<(-1)*eps){st=med+1;continue;}
if(a[med].x-xd.x>eps){dr=med-1;continue;}
if(a[med].y-xd.y<(-1)*eps){st=med+1;continue;}
if(a[med].y-xd.y>eps){dr=med-1;continue;}
l1=1;
break;
}
sum+=l*l1;
}
ok=1;
}
}
printf("%d\n",sum/4);
return 0;
}