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