Dancing Stars on Me HDU - 5533
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dancing Stars on Me HDU - 5533相关的知识,希望对你有一定的参考价值。
Dancing Stars on Me HDU - 5533
题意:
LYD又来了,这次他碰到了一个小问题,给定n个点,点的坐标为均为整数,问这些点能否组成正多边形?
题解:
如果是正多边形,那中心的坐标就是所有坐标的平均值,只需要判断中心到各点的距离是否一样长就行
还有一个做法是,由于坐标值均为整数,只有正方形的坐标都是整数,所以就是判断是否为正方形
代码:
#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\\n",a,b);
typedef long long ll;
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);
return s*w;
}
const int maxn=400;
struct point{
double x,y;
}a[maxn];
const double eps=0.0000001;
bool iff(double x,double y){
if(abs(x-y)<eps)return 1;
else return 0;
}
double distance(point x,point y){
return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
}
int main()
{
int t;
t=read();
while(t--){
int n;
n=read();
point mid;
mid.x=0;
mid.y=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
a[i].x=read();
a[i].y=read();
mid.x+=a[i].x;
mid.y+=a[i].y;
}
mid.x/=n;
mid.y/=n;
double last=-1;
bool f=0;
for(int i=1;i<=n;i++){
if(last==-1){
last=distance(mid,a[i]);
continue;
}
double dis=distance(mid,a[i]);
if(iff(dis,last)==0)
{
f=1;
break;
}
}
if(f==1)puts("NO");
else puts("YES");
}
return 0;
}
以上是关于Dancing Stars on Me HDU - 5533的主要内容,如果未能解决你的问题,请参考以下文章
HDU 5533 Dancing Stars on Me 计算几何瞎暴力
Dancing Stars on Me HDU - 5533
Dancing Stars on Me---hdu5533(判断是否为正多边形)