Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- input()
- input()
- nord_amounts = [int(x) for x in input().split()]
- south_amounts = [int(x) for x in input().split()]
- def get_median(a, left, right):
- return (a[(left + right) // 2] + a[(left + right + 1) // 2]) / 2
- def find_median(a, b):
- if len(a) > len(b):
- a, b = b, a
- left_a = left_b = 0
- right_a = len(a) - 1
- med_a = get_median(a, left_a, right_a)
- right_b = len(b) - 1
- med_b = get_median(b, left_b, right_b)
- while med_a != med_b and right_a > left_a:
- offset = (right_a - left_a + 1) // 2
- if med_a > med_b: # сдвигаем в a справа
- right_a -= offset
- left_b += offset
- else:
- left_a += offset
- right_b -= offset
- med_a = get_median(a, left_a, right_a)
- med_b = get_median(b, left_b, right_b)
- # Вероятно в этом месте в 20м тесте left_a на единицу меньше, чем должно быть. Почему?
- if med_a == med_b:
- return med_a
- if left_b == right_b:
- return (med_a + med_b) / 2
- if (right_b - left_b) % 2: # чётное количество элементов осталось
- left_b = (left_b + right_b - 1) // 2
- right_b = left_b + 1
- else: # осталось нечётное количество элементов
- mid = (left_b + right_b) // 2
- left_b = mid - 1
- right_b = mid + 1
- c = b[left_b:right_b + 1]
- c.append(a[left_a])
- c.sort()
- return get_median(c, 0, len(c) - 1)
- print(find_median(nord_amounts, south_amounts))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement