题目链接
http://118.190.20.162/view.page?gpid=T113
解题代码
第一题,数据量很小,直接用数组实现了。
数据量如果可以用堆,插入的时候排序。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//n表示检测点总数
int n = input.nextInt();
//X, Y 表示市民所在位置
int X = input.nextInt();
int Y = input.nextInt();
//保存检测点位置
int[][] posArr = new int[n][3];
for (int i = 0; i < n; i++) {
posArr[i][0] = input.nextInt();
posArr[i][1] = input.nextInt();
//保存编号
posArr[i][2] = i + 1;
}
sort(posArr, X, Y);
for (int i = 0; i < 3; i++) {
System.out.println(posArr[i][2]);
}
input.close();
}
//根据题目要求,进行排序
private static void sort(int[][] arr, int x, int y) {
Arrays.sort(arr, ((o1, o2) -> {
int dis1 = countDis(x, y, o1[0], o1[1]);
int dis2 = countDis(x, y, o2[0], o2[1]);
return dis1 == dis2 ? o1[2] - o2[2] : dis1 - dis2;
}));
}
//为了方便,按照平方计算的
private static int countDis(int x, int y, int posX, int posY) {
return (posX - x) * (posX - x) + (posY - y) * (posY - y);
}
}