Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 223 Accepted Submission(s): 151
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 25
int n;
struct node
{
int x, y;
}P[N];
int slove(int i, int j, int k, int q) // 判断是否为正四边形
{
if(i == j || i == k) // 不能有重点
return false;
if(i == q || j == k)
return false;
if(j == q || k == q)
return false;
int w = 0, num[8];
memset(num, 0, sizeof(num));
num[w++] = (P[i].x-P[j].x)*(P[i].x-P[j].x)+(P[i].y-P[j].y)*(P[i].y-P[j].y);
num[w++] = (P[i].x-P[k].x)*(P[i].x-P[k].x)+(P[i].y-P[k].y)*(P[i].y-P[k].y);
num[w++] = (P[i].x-P[q].x)*(P[i].x-P[q].x)+(P[i].y-P[q].y)*(P[i].y-P[q].y);
num[w++] = (P[j].x-P[k].x)*(P[j].x-P[k].x)+(P[j].y-P[k].y)*(P[j].y-P[k].y);
num[w++] = (P[j].x-P[q].x)*(P[j].x-P[q].x)+(P[j].y-P[q].y)*(P[j].y-P[q].y);
num[w++] = (P[q].x-P[k].x)*(P[q].x-P[k].x)+(P[q].y-P[k].y)*(P[q].y-P[k].y);
sort(num, num+w);
w = unique(num, num+w) - num;
if(w != 2) // 只能有两种不相同的边
return false;
return true;
}
int main()
{
int t;
scanf("%d\n", &t);
while(t--)
{
scanf("%d", &n);
int ans = 0;
for(int i = 1; i <= n; i++)
scanf("%d%d", &P[i].x, &P[i].y);
if(n != 4)
{
printf("NO\n");
continue;
}
for(int i = 1; i <= n; i++)
for(int j = i+1; j <= n; j++)
for(int k = j+1; k <= n; k++)
for(int q = k+1; q <= n; q++)
if(slove(i, j, k, q))
ans++;
if(ans != 0)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
原文:http://www.cnblogs.com/Tinamei/p/4944888.html