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

HDU 5533 Dancing Stars on Me 计算几何瞎暴力

Dancing Stars on Me HDU - 5533

Dancing Stars on Me---hdu5533(判断是否为正多边形)

HDU5046 Airport dancing links 重复覆盖+二分

HDU 5046 Airport ( Dancing Links 反复覆盖 )