题意:
给你一些坐标,都是整数,求由整数点构成的正三角形,正方形,正五边形,正六边形的数目。
题解:
地球人都知道整数坐标构不成正三角形,正五边形和正六边形的。
所以呢这道题直接暴力,求正四边形的个数,这里判断是否是正四边形。
至于如何判断正方形,枚举四个点,算出四条边,两条对角线。
判断四条边是否相等,两条对角线是否等于x∗2√
my code
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 25;
int s[6];
struct Point {
int x, y;
} poi[N];
int sqare(Point a, Point b) {
return (a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y);
}
bool judge(Point a, Point b, Point c, Point d) {
int t = 0;
s[t++]=sqare(a, b);
s[t++]=sqare(b, c);
s[t++]=sqare(c, d);
s[t++]=sqare(d, a);
s[t++]=sqare(a, c);
s[t++]=sqare(b, d);
sort(s, s + 6);
if(s[0]==s[1] && s[2]==s[3] && s[1]==s[2] && s[4]==2*s[0] && s[5]==s[4])
return true;
return false;
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
for(int i = 0; i < n; i++) {
scanf("%d%d", &poi[i].x, &poi[i].y);
}
int ans = 0;
for(int i = 0; i < n; i++)
for(int j = i+1; j < n; j++)
for(int k = j+1; k < n; k++)
for(int u = k+1; u < n; u++)
if(judge(poi[i], poi[j], poi[k], poi[u]))
ans++;
printf("%d\n", ans);
}
return 0;
}