HDU 5563 Clarke and five-pointed star

5563 Clarke and five-pointed star

这是昨天晚上BC的B题,题目是说给你五个点,让你判断是不是能够成整五角星。换句话说就是让你判断是不是整五边形。
这里有两种思路

  • 从角度出发判断每个角的角度。
  • 从边出发判断边的长短。
#include<bits/stdc++.h>
using namespace std;
#define eps 0.00001
struct node
{
    double x,y;
};
node a[6];
double d[20];
double pp(double x1,double y1,double x2,double y2)
{
    return sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0; i<5; i++)
            scanf("%lf%lf",&a[i].x,&a[i].y);
        int cnt=0,flag=1;
        for(int i=0; i<5; i++)
        {
            for(int j=i+1; j<5; j++)
            {
                d[cnt++]=pp(a[i].x,a[i].y,a[j].x,a[j].y);
            }
        }
        sort(d,d+cnt);
		//只需要判断临近的边就行了。
        for(int i=1; i<5; i++)
        {
            if(abs(d[i]-d[i-1])>1e-5)
            {
                flag=0;
                break;
            }
        }
        if(flag)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

posted @ 2015-11-16 04:41  zzuli_柚子  阅读(117)  评论(0编辑  收藏  举报