坑点:
- 注意给的都是整数
- 根据2017的国家队论文(杨景钦的),可知只有正方形满足点的坐标为整数,所以只考虑正方形
- n^2的枚举两个点 然后判断对应的两个点是否存在。 注意左边映射,不仅需要把原来负的坐标映射成正的,还需要为可能的坐标判断留下空间,所以是+100+200;
typedef long long int lli;
using namespace std;
struct node{
int x,y;
}no[550];
int ma[1550][1550];
int main(){
int n,cas,a,b,len;
while(~scanf("%d",&n)){
memset(ma,0,sizeof(ma));
for(int i = 1;i <= n;i++){
scanf("%d%d",&no[i].x,&no[i].y);
no[i].x += 300;no[i].y += 300;//重要 坐标变换的最小值
ma[no[i].x][no[i].y] = 1;
}
int cnt = 0;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(i==j) continue;
int ay = no[i].y-no[j].y;
int ax = no[i].x-no[j].x;
int xi = no[i].x,yi = no[i].y;
int xj = no[j].x,yj = no[j].y;
if(ma[xi-ay][yi+ax]&&ma[xj-ay][yj+ax]) cnt++;
if(ma[xi+ay][yi-ax]&&ma[xj+ay][yj-ax]) cnt++;
}
}
printf("%d\n",cnt/8);
}
}