题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5533
题意:
给出n个点的坐标问这些点是否能构成正n边形。
题解:
因为数据范围给的很小,n<=100,我们就可以暴力算出一个点与其他所有点的距离,因为要构成正n边形,画个图后就会知道一个点与它最近的点一定要连边,因为正多边形边长都要相同,因此直接枚举判断就可以。
代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
using namespace std;
int n,T,x[105],y[105],cnt;
double dis[105][105];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
{
int lx=abs(x[j]-x[i]);
int ly=abs(y[j]-y[i]);
double xx=(double)lx*1.0;
double yy=(double)ly*1.0;
dis[i][j]=sqrt(xx*xx+yy*yy);
dis[j][i]=dis[i][j];
}
int flag=0;
for (int i=1;i<=n;i++)
{
cnt=0;
double mmin=99999.9;
for (int j=1;j<=n;j++)
{
if (i==j) continue;
if (dis[i][j]<mmin)
{
cnt=1;
mmin=dis[i][j];
}
else if (dis[i][j]==mmin)
cnt++;
}
if (cnt<2)
{printf("NO\n");flag=1;break;}
}
if (!flag)
printf("YES\n");
}
}

这是一道2015 ACM/ICPC 亚洲区长春站的竞赛题目,要求判断给定的n个点坐标能否构成正n边形。由于数据范围限制(n<=100),可以通过暴力求解每个点与其他点的距离,如果每个点与其最近的点距离相等,则可以构成正n边形。解题思路是枚举所有可能的边长进行比较。

13万+

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



