暴力枚举题:平面上的点与外心
问题:
思路:
首先,外心是唯一的,我们需要枚举外心,若有点在圆上,则这些点到该外心的距离相等。因此我们需求出外心到所有点的距离,接下来是一个组合问题,如果外心到x个点的距离相同,那么不同的三点组的数目为Cx3=x(x-1)(x-2)/3!=x(x-1)(x-2)/6。因此我们用map保存距离,以及到外心为该距离的点的数目,最后遍历该map,找出点的数目>=3的,按上述组合公式计算即可
代码:
需注意的点:
直接import java.util.*是可行的
import java.util.*;
public class Main {
public static void main(String[] args) {
int[][] point = new int[2001][2];
int n;
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
int i;
for (i = 0;i < n;i++) {
point[i][0] = scanner.nextInt();
point[i][1] = scanner.nextInt();
}
int ans = 0;
int j;
long x;
long y;
long dis;
int num;
Map<Long, Integer> map = new HashMap<>();
for (i = 0;i < n;i++) {
map.clear();
x = point[i][0];
y = point[i][1];
for (j = 0;j < n;j++) {
if (j != i) {
dis = (x - point[j][0]) * (x - point[j][0]) + (y - point[j][1]) * (y - point[j][1]);
if (map.get(dis) == null) {
map.put(dis, 1);
} else {
map.put(dis, map.get(dis) + 1);
}
}
}
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
num = map.get(iterator.next());
if (num >= 3) {
ans += (num) * (num - 1) * (num - 2) / 6;
}
}
}
System.out.println(ans);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153759.html