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.
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
Sample Output
NO YES NO
题意:给你几个点,问能否形成正多边形。
思路:
①找出所有点之间的最短距离,即边长。然后再在所有点中找出与边长相等的,只要数量为n即
说明能够成正多边形
②要求输入的为整数,所以只有正四边形才能成立,判断下即可
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn = 105;
double x[maxn], y[maxn], edge[maxn][maxn];
double get_edge(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--)
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%lf%lf", &x[i], &y[i]);
double tmin = 0x3f3f3f3f;
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
{
edge[i][j] = get_edge(i, j);
tmin = min(tmin, edge[i][j]);
}
int cou = 0;
for(int i = 0; i < n; i++)
for(int j = i + 1; j < n; j++)
{
if(tmin == edge[i][j])
cou++;
}
if(cou == n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}