B004二分法,如何找最接近的数?

摘要:AWC Beta0035B 当你用 i = bisect_left(b, x) 得到下标后,会有三种情况: i = 0:说明 x 比列表里所有数都小,最接近的就是第一个数 b[0]。 i = len(b):说明 x 比列表里所有数都大,最接
AWC Beta0035B 当你用 i = bisect_left(b, x) 得到下标后,会有三种情况: i = 0:说明 x 比列表里所有数都小,最接近的就是第一个数 b[0]。 i = len(b):说明 x 比列表里所有数都大,最接近的就是最后一个数 b[-1]。 在中间:此时 x 处于 b[i-1] 和 b[i] 之间。你需要对比这两个数,看谁离 x 更近。 模板代码: def main(): n, m = MII() a = sorted(LII()) b = sorted(LII()) ans = 0 for x in a: i = bisect_left(b, x) mi = b[0] if i == m: mi = b[-1] elif 0 < i < m: t1 = abs(b[i] - x) t2 = abs(b[i-1] - x) mi = b[i] if t1 < t2 else b[i-1] ans += abs(mi - x) print(ans) CF 702C T90-007