题意:给n个不同的整数点,问:能找出多少个不同的正多边形?
题解:因为都是整数点,故只会出现正四方形,题目就变成了找正边多形的个数。
我们枚举正方形的一边,在左右两边看是否能找到满足条件?
#include<bits/stdc++.h>
using namespace std;
struct point{
int x,y;
} p[600];
int ans;
bool vis[500][500];
void solve(int t1,int t2)
{
int dx=p[t1].x-p[t2].x;
int dy=p[t1].y-p[t2].y;
///看看左右两边是否满足条件
if(p[t1].x-dy>0&&p[t1].y+dx&&p[t2].x-dy&&p[t2].y+dx){
if(vis[p[t1].x-dy][p[t1].y+dx]&&vis[p[t2].x-dy][p[t2].y+dx]) ans++;
}
if(p[t1].x+dy>0&&p[t1].y-dx&&p[t2].x+dy&&p[t2].y-dx){
if(vis[p[t1].x+dy][p[t1].y-dx]&&vis[p[t2].x+dy][p[t2].y-dx]) ans++;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
p[i].x+=200;
p[i].y+=200;
vis[p[i].x][p[i].y]=1;
}
ans=0;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
solve(i,j);
printf("%d\n",ans/4);
}
return 0;
}