第一步:Devide 将目标问题划分为若干小规模的同类问题
第二步:Conquer 将子问题递归解决
第三步:Combine 将若干子问题的解合并构成原问题的解
问题描述:
您的输入将是在一条直线上给出的二维点序列,坐标由一个空间分隔。坐标是整数。您应该输出最小平方欧氏距离,这样自动标记就不会麻烦的双精度。时间复杂度要求为O(n log n)。
import sys
def calDis(seq):
dis = (seq[0][0] - seq[1][0]) ** 2 + (seq[0][1] - seq[1][1]) ** 2
return dis
def candidateDot(u, right, dis):
cnt = 0
for v in right:
cnt += 1
if v[1] > u[1] + dis or cnt > 3:
break
yield v
def combine(left, right, resMin):
med_x = (left[-1][0] - right[0][0]) / 2
dis = resMin[1]
minDis = resMin[1]
pair = resMin[0]
for u in left: