Input
The first line contains a integer T indicating the total number of test cases. Each test case begins with an integer n, denoting the number of stars in the sky. Following n lines, each contains 2 integers xi,yi, describe the coordinates of n stars.
1≤T≤300
3≤n≤100
−10000≤xi,yi≤10000
All coordinates are distinct.
Output
For each test case, please output "`YES`" if the stars can form a regular polygon. Otherwise, output "`NO`" (both without quotes).
Sample Input
3
3
0 0
1 1
1 0
4
0 0
0 1
1 0
1 1
5
0 0
0 1
0 2
2 2
2 0
3
0 0
1 1
1 0
4
0 0
0 1
1 0
1 1
5
0 0
0 1
0 2
2 2
2 0
Sample Output
NO
YES
NO
YES
NO
题意:给你几个点,问能否形成正多边形。
思路:
①找出所有点之间的最短距离,即边长。然后再在所有点中找出与边长相等的,只要数量为n即
说明能够成正多边形
②要求输入的为整数,所以只有正四边形才能成立,判断下即可
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
double x[1005];
double y[1005];
double len[1005][1005]; double get_(int i,int j)
{
return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
} int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
double tmin = 0x3f3f3f3f;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%lf%lf",&x[i],&y[i]);
}
for(int i = 1; i <= n; i++)
for(int j = i+1; j <= n; j++)
{
len[i][j] = get_(i,j);
tmin = min(tmin,len[i][j]);
}
int num = 0;
for(int i = 1; i <= n; i++)
for(int j = i+1; j <= n; j++)
{
if(tmin == len[i][j])
{
num++;
}
}
if(num == n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}