-
Notifications
You must be signed in to change notification settings - Fork 21
/
d.py
30 lines (21 loc) · 989 Bytes
/
d.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# https://contest.yandex.ru/contest/27844/problems/C/
# C помощью бинарного поиска находим максимальную толщину дополнительной защиты,
# вычисляя максимальное количество модулей, которые можем разместить с такой толщиной.
def additional_protection(n, a, b, w, h):
left, right = 0, min(w, h)
while left + 1 < right:
d = (left + right) // 2
x = max((w // (a + 2 * d)) * (h // (b + 2 * d)), (h // (a + 2 * d)) * (w // (b + 2 * d)))
if x >= n:
left = d
else:
right = d
return left
assert additional_protection(1, 1, 1, 1, 1) == 0
assert additional_protection(1, 1, 1, 3, 3) == 1
assert additional_protection(11, 3, 2, 21, 25) == 2
def main():
n, a, b, w, h = map(int, input().split())
print(additional_protection(n, a, b, w, h))
if __name__ == '__main__':
main()