纯二分 水
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::memset;
using std::sort;
const int MAX = 2005;
int n;
struct position
{
int x,y;
}star[MAX];;
bool cmp(position a,position b)
{
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}
int cmp2(position a, position b)
{
if(a.x == b.x)
{
if(a.y == b.y)
return 0;
else if(a.y < b.y)
return -1;
else
return 1;
}
else if(a.x < b.x)
return -1;
return 1;
}
bool binsearch(int l, int r, position x)
{
while(l+1 < r)
{
int m = (l+r)>>1;
if(cmp2(x, star[m]) == 0)
return true;
else if(cmp2(x, star[m]) == -1)
r = m;
else
l = m;
}
return false;
}
int main()
{
while(scanf("%d", &n) && n)
{
for(int i = 0 ; i < n; i++)
{
scanf("%d%d", &star[i].x, &star[i].y);
}
sort(star, star+n, cmp);
//for(int i = 0 ; i < n; i++)
//{
// printf("%d%d\n", star[i].x, star[i].y);
//}
int count = 0;
for(int i = 0 ; i < n; i++)
{
for(int j = i+1; j < n; j++)
{
int dx = star[j].x - star[i].x;
int dy = star[j].y - star[i].y;
position temp;
temp.x = star[i].x + dy;
temp.y = star[i].y - dx;
if(binsearch(-1, n, temp) == false) continue;
temp.x = star[j].x + dy;
temp.y = star[j].y - dx;
if(binsearch(-1, n, temp) == false) continue;
count++;
}
}
printf("%d\n", count/2);
}
}