C++版:
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 210;
struct Point{
int seq;
int d;
bool operator < (const Point &p) const{
if(d == p.d) return seq < p.seq;
else return d < p.d;
}
}point[N];
int dist(int x1, int y1, int x, int y){
return pow((x1 - x), 2) + pow((y1 - y), 2);
}
int main(){
int n, x, y;
int x1, y1;
scanf("%d%d%d", &n, &x, &y);
for(int i = 1; i <= n; i++){
scanf("%d%d", &x1, &y1);
int dd = dist(x1, y1, x, y);
point[i] = {i, dd};
}
sort(point + 1, point + n + 1);
for(int i = 1; i <= 3; i++){
printf("%d\n", point[i].seq);
}
}
java版:
import java.lang.*;
import java.util.*;
import java.io.*;
public class Main {
static int N = 210;
public static double dist(int x1,int y1, int x, int y){
return Math.pow((x1 - x), 2) + Math.pow((y1 - y), 2);
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] param = br.readLine().split(" ");
int n = Integer.parseInt(param[0]);
int x = Integer.parseInt(param[1]);
int y = Integer.parseInt(param[2]);
PriorityQueue<int[]> q = new PriorityQueue<>(new Comparator<int[]>() {
public int compare(int[] o1, int[] o2){
if(o1[1] != o2[1]) return o1[1] - o2[1];
else return o1[0] - o2[0];
}
});
for(int i = 1; i <= n; i++){
param = br.readLine().split(" ");
int x1 = Integer.parseInt(param[0]);
int y1 = Integer.parseInt(param[1]);
q.add(new int[]{i, (int)dist(x1, y1, x, y)});
}
for(int i = 1; i < 4; i++){
System.out.println(q.poll()[0]);
}
br.close();
}
}