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;
}