#include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> #include<iostream> #include<string> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algorithm> #include<time.h> using namespace std; void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);} #define MS(x,y) memset(x,y,sizeof(x)) #define MC(x,y) memcpy(x,y,sizeof(x)) #define MP(x,y) make_pair(x,y) #define ls o<<1 #define rs o<<1|1 typedef long long LL; typedef unsigned long long UL; typedef unsigned int UI; template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;} template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;} const int N=105,M=0,Z=1e9+7,ms63=1061109567; int casenum,casei; int n; int y[N],x[N]; int b[10]; bool check() { if(n!=4)return 0; int m=0; for(int i=1;i<=4;i++) { for(int j=i+1;j<=4;j++) { b[++m]=(y[i]-y[j])*(y[i]-y[j])+(x[i]-x[j])*(x[i]-x[j]); } } sort(b+1,b+m+1); return b[2]==b[1] &&b[3]==b[2] &&b[4]==b[3] &&b[5]==2*b[4] &&b[6]==b[5]; } int main() { scanf("%d",&casenum); for(casei=1;casei<=casenum;casei++) { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%d",&y[i],&x[i]); puts(check()?"YES":"NO"); } return 0; } /* 【题意】 T(300)组数据。 对于每组数据,给你n([3,100])个点,每个点的坐标都在[-10000,10000]之间。 所有坐标都不相同。 我们想知道这些点是否可以连接构成正n边形。 【类型】 结论题 【分析】 有结论,平面上的正多边形只可能是正四边形。 于是我们只在n==4的时候判定。 判定方法是求出每两个点之间的距离的平方。 是否比例是1:1:1:1:2:2。 因为这个是在平面图上,不会有立体图形的干扰,所以这个判定条件就是充要的。 */