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
