题目链接:
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=760
题意:
给你N个点,问你能够构成几个正多边形。
题解:
首先,根据整数点,你需要知道,能够满足条件的,只有正四变形。
然后,我们可以先确定两个点,来判断能不能构成正四边形。(需要注意的是这个边界的判断,自己就翻了车。。。。。。)
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
#define inf 0x3f3f3f3f
const int maxn = 1000+10;
#define met(a,b) memset(a,b,sizeof(a))
int x[maxn],y[maxn];
int visited[maxn][maxn];
struct node
{
int x,y;
}p[maxn];
int main()
{
int n;
met(visited,0);
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<=500;i++)
for(int j=0;j<=500;j++)
visited[i][j]=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
p[i].x+=300;
p[i].y+=300;
visited[p[i].x][p[i].y]=1;
}
int cnt=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
node p1,p2;
p1=p[i];
p2=p[j];
int x=p1.x-p2.x;
int y=p1.y-p2.y;
int x1=p1.x+y;
int y1=p1.y-x;
int x2=p2.x+y;
int y2=p2.y-x;
int x3=p1.x-y;
int y3=p1.y+x;
int x4=p2.x-y;
int y4=p2.y+x;
if(visited[x1][y1]&&visited[x2][y2])
cnt++;
if(visited[x3][y3]&&visited[x4][y4])
cnt++;
}
}
printf("%d\n",cnt/4);
}
}
本文介绍了一种计算平面上整数坐标点能构成的正四边形数量的算法。通过确定两个点并检查其余两个对角点是否存在于给定点集中来实现。代码使用 C++ 实现,并考虑了边界条件。
1665

被折叠的 条评论
为什么被折叠?



