Как найти среди N точек с целочисленными координатами пару самых ближних и пару самых дальних друг от друга точек?

Данные задачи

На плоскости заданы N точек с целочисленными координатами. Требуется найти среди них пару самых ближних и пару самых дальних друг от друга точек.

Входные данные

Первая строка входного файла INPUT.TXT содержит целое число N (2 ≤ N ≤ 1000) – количество точек. Далее следует N строк пар целых чисел (Xi,Yi), описывающих координаты первой, второй и т.д. точек соответственно (-109 ≤ Xi,Yi ≤ 109).

Выходные данные

В первой строке выходного файла OUTPUT.TXT выведите через пробел номера пары ближних друг к другу точек. Во второй строке выведите номера пары дальних друг от друга точек. В случае неоднозначности определения ответа выведите любой.

Мое решение прошло 10 тестов из 20:

package task1123;

import java.util.Scanner;
import java.util.Locale;

public class Task1123 {
    public static class point {
        public int x;
        public int y;
        
        public point(int x, int y) {
            this.x = x;
            this.y = y;

        }
    }

    public static double dist(point a,point b) {
        return Math.sqrt((a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y));
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        sc.useLocale(Locale.US);
        point a[] = new point[1000];
        int n, p = 0, q = 1, r = 0,s = 1;
        double c = 0, mn, mx;
        n = sc.nextInt();
        for(int i = 0; i < n; i++)
        {
            a[i] = new point(sc.nextInt(), sc.nextInt());
        }
        mn = dist(a[0],a[1]);
        mx = mn;
        for(int i = 0;i < n - 1; i++)
        {
            for(int j = i + 1; j < n; j++)
            {
                c = dist(a[i],a[j]);
                if(c < mn){
                    mn=c;
                    p=i;
                    q=j;
                }
                else if(c > mx){
                    mx=c;
                    r=i;
                    s=j;
                }
            }
        }
        System.out.println((p + 1) + " " + (q + 1));
        System.out.println((r + 1) + " " + (s + 1));
    }
}

Ответы (1 шт):

Автор решения: Qwertiy
(a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y)

2*(2*109)2 - используй long, а не int. И выкинь квадратный корень.

→ Ссылка