Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Это классическая задача на бинарный поиск по ответу. Бинарным поиском будем искать x -- ограничение на расстояние между коровами (каждое расстояние должно быть >= x). В таком случае, максимальное x при котором мы можем рассадить достаточно коров и будет максимальным возможным наименьшим расстоянием.
- Проверить, можем ли мы рассадить достаточно коров при ограничении в расстоянии x, можно линейно. Посчитаем, сколько максимально коров мы можем посадить при таком ограничении: поставим первую корову в первое стойло, вторую корову в первое последующее стоило, до которого расстояние от первого будет >= x, и тд. Если мы таким образом смогли рассадить >= k коров, значит такое x нам подходит и можем попробовать найти x больше. Иначе будем искать x среди меньших.
- Пример кода на python:
- n, k = map(int, input().split())
- a = list(map(int, input().split()))
- l = 0
- r = 1000000000
- while r - l > 1:
- x = (r + l) // 2
- cnt = 1
- lst = a[0]
- for i in range(1, n):
- if a[i] - lst >= x:
- lst = a[i]
- cnt += 1
- if cnt >= k:
- l = x
- else:
- r = x
- print(l)
Advertisement
Add Comment
Please, Sign In to add comment