hdu 5533(几何水)

 

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.

1T300
3n100
10000xi,yi10000
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 <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;
}

  

posted @ 2015-11-04 13:45  Przz  阅读(212)  评论(0编辑  收藏  举报