Cặp điểm gần nhất

Đề bài

Mô tả

Cho N điểm trên mặt phẳng tọa độ: điểm thứ i có tọa độ (xi,yi). Các điểm có thể trùng nhau (nhiều điểm có cùng tọa độ).

Hãy tìm bình phương khoảng cách Euclid nhỏ nhất giữa hai điểm phân biệt theo chỉ số, tức là tính:

min1≤i<j≤N((xi−xj)2+(yi−yj)2)

In ra kết quả dưới dạng một số nguyên duy nhất. Nếu có ít nhất hai điểm trùng tọa độ thì đáp số bằng 0.

Dữ liệu vào

  • Dòng đầu: số nguyên N — số điểm.
  • N dòng tiếp theo: dòng thứ i chứa hai số nguyên xi và yi.

Dữ liệu ra

  • Một số nguyên: bình phương khoảng cách Euclid nhỏ nhất giữa hai điểm phân biệt theo chỉ số.

Ràng buộc

  • 2≤N≤105
  • −109≤xi,yi≤109
  • Đáp số luôn vừa kiểu long long (không vượt quá 8·1018).

Ví dụ

Input Output Giải thích
3
0 0
3 4
1 1
2 Khoảng cách giữa (0,0) và (1,1) là 2, bình phương bằng 2. Hai cặp còn lại lớn hơn.
4
0 0
1 0
0 1
1 1
1 Bốn đỉnh hình vuông đơn vị. Hai điểm gần nhất nằm cách nhau đúng 1 đơn vị (ví dụ (0,0) và (1,0)).
3
5 5
5 5
100 200
0 Hai điểm đầu trùng nhau, nên bình phương khoảng cách nhỏ nhất bằng 0.

Ghi chú

  • Đáp số có thể lớn tới 8·1018 khi hai điểm nằm ở hai góc đối lập của vùng tọa độ ((−109,−109) và (109,109)), do đó bạn nên dùng kiểu số nguyên 64-bit khi tính toán và in kết quả.
  • Việc dùng kiểu số thực (double) và sqrt rồi bình phương lại sẽ dễ bị sai số, không khuyến khích.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0