-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathL_two_bicycles.py
69 lines (55 loc) · 3.34 KB
/
L_two_bicycles.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""
L. Два велосипеда
Вася решил накопить денег на два одинаковых велосипеда — себе и сестре. У Васи
есть копилка, в которую каждый день он может добавлять деньги (если, конечно,
у него есть такая финансовая возможность). В процессе накопления Вася не
вынимает деньги из копилки.
У вас есть информация о росте Васиных накоплений — сколько у Васи в копилке
было денег в каждый из дней.
Ваша задача — по заданной стоимости велосипеда определить
первый день, в которой Вася смог бы купить один велосипед,
и первый день, в который Вася смог бы купить два велосипеда.
Подсказка: решение должно работать за O(log n).
Формат ввода
В первой строке дано число дней n, по которым велись наблюдения за Васиными
накоплениями. 1 ≤ n ≤ 106.
В следующей строке записаны n целых неотрицательных чисел. Числа идут в
порядке неубывания. Каждое из чисел не превосходит 106.
В третьей строке записано целое положительное число s — стоимость велосипеда.
Это число не превосходит 106.
Формат вывода
Нужно вывести два числа — номера дней по условию задачи.
Если необходимой суммы в копилке не нашлось, нужно вернуть -1 вместо номера
дня.
Пример 1
Ввод
6
1 2 4 4 6 8
3
Вывод
3 5
"""
def find_days(n, savings, cost):
"""
Функция find_day принимает количество дней (n), список сбережений
за каждый день и стоимость велосипеда. Он перебирает сбережения и
отслеживает первый день, когда у Васи накопилось достаточно сбережений,
чтобы купить один велосипед, и первый день, когда у Васи накопилось
достаточно сбережений, чтобы купить два велосипеда. Функция возвращает
кортеж из двух дней, и если у Васи никогда не было достаточно сбережений,
она возвращает -1 вместо номера дня.
"""
first_bike = -1
second_bike = -1
for i in range(n):
if savings[i] >= cost and first_bike == -1:
first_bike = i + 1
if savings[i] >= 2 * cost and second_bike == -1:
second_bike = i + 1
break
return (first_bike, second_bike)
if __name__ == '__main__':
n = int(input())
savings = list(map(int, input().split()))
cost = int(input())
print(*find_days(n, savings, cost))