AC代码
import math
global msg
def solution(left,right):
dis=float("inf")
#递归终点
if left==right:
return dis
elif left+1==right:
return distance(msg[left],msg[right])
mid=(right+left)//2
d1=solution(left,mid)
d2=solution(mid+1,right)
dis=min(d1,d2)
tmp=[]
for i in range(left,right+1):
if abs(msg[i][0]-msg[mid][0])<=dis:
tmp.append(msg[i].copy())
tmp.sort(key=lambda x:x[1])
lth=len(tmp)
for i in range(lth):
for j in range(i+1,min(9,lth)):
dis=min(dis,distance(tmp[i],tmp[j]))
return dis
def distance(p1,p2):
return math.sqrt((p1[0]-p2[0])**2+(p1[1]-p2[1])**2)
n=int(input())
msg=[]
for i in range(n):
x,y=map(int,input().split())
msg.append([x,y])
msg.sort(key=lambda x:x[0])
dis=solution(0,n-1)
print("%.4f"%dis)