Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.07.2019
Сообщений: 3
1

Сбор вишни

28.09.2019, 12:11. Показов 1658. Ответов 3

Author24 — интернет-сервис помощи студентам
Задача не проходит по Time Limit. Всё перепробовал, не знаю, как оптимизировать.

Задача:
У Макса в огороде есть большой вишневый сад, состоящий из N деревьев, расположенных по кругу. На каждом из деревьев висит некоторое количество вишен.
Макс хочет собрать ягоды, а для этого выбрать дерево с которого начинать сбор и идти по кругу, либо по часовой, либо против часовой стрелки. Макс решил собирать ягоды в ведра, каждое из которых вмещает K вишен. Сбор ягод с высоких деревьев – трудоемкая задача, поэтому для удобства Макс хочет, чтобы вместимости текущего ведра всегда хватало, чтобы собрать всю вишню с дерева полностью. Тогда, если вместимости ведра не хватает, Макс кладет текущее ведро и берет новое.

Макс хочет выбрать точку начала и направление оптимально так, чтобы использовать как можно меньшее количество ведер.

Выведите минимальное количество ведер, которое понадобится Максу для сбора всех ягод.

Входные данные:
Первая строка содержит целые числа N и K — соответственно количество деревьев и вместимость одного ведра.

Вторая строка содержит N целых чисел — количество вишен на каждом из деревьев.

Выходные данные
Выведите одно целое число — количество ведер, которое понадобится Максу, чтобы собрать всю вишню.

Примеры:
входные данные
5 10
3 3 3 7 2
выходные данные
2
входные данные
7 10
3 3 7 3 4 4 3
выходные данные
3

Мой код (не проходит по Time Limit):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
n, m = map(int, input().split())
l = [int(i) for i in input().split()]
mimi = (sum(l) - 1) // m + 1
ans = n
 
for i in range(0, n, 2):
    kol = 1
    now = 0
    for j in range(n):
        if now + l[j] > m:
            kol += 1
            now = l[j]
        else:
            now += l[j]
    ans = min(ans, kol)
    if ans == mimi:
        break
    l = l[2:] + [l[0], l[1]]
 
print(ans)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2019, 12:11
Ответы с готовыми решениями:

Сбор значений с запроса
Имеется сайт с таблицей, но она загружается с помощью ajax после запроса (после парсинга сайта,...

Сбор данных о работе пользователя
Доброго времени суток! Возникла идея написать скрипт для сбора информации о работе пользователя....

Сбор данных в общий файл
Доброго времени суток. Дано: папка с большим количеством exсel файлов F1, F2...Fn и один сводный...

Сбор данных о текстовом файле
with open(f2, 'r', encoding='utf-8') as f_in: s2 = f_in.read() size = sum(1 for _ in f2)...

Сбор ягод
N девочек собирали ягоды, малину, смородину, крыжовник. Найдите,сколько всего килограмм ягод...

3
8 / 12 / 2
Регистрация: 08.08.2019
Сообщений: 63
29.09.2019, 15:37 2
Фнтон200, скинь ограничения по времени и n какой может быть
0
0 / 0 / 0
Регистрация: 21.07.2019
Сообщений: 3
29.09.2019, 15:46  [ТС] 3
ограничение по времени на тест 2 секунды
ограничение по памяти на тест 64 мегабайта
1 <= n <= 2 * 10 в 5
0
8 / 12 / 2
Регистрация: 08.08.2019
Сообщений: 63
30.09.2019, 17:11 4
Фнтон200, когда решаешь задачу, прикидывай время работы по твоему решению. У тебя нелегкое решение. 1) И так ~1/2n2, но это еще не страшно, 2) Срезы работают за один проход массива, т. е. то же самое, что for (n).
Цитата Сообщение от Фнтон200 Посмотреть сообщение
for i in range(0, n, 2):
Цитата Сообщение от Фнтон200 Посмотреть сообщение
for j in range(n):
Цитата Сообщение от Фнтон200 Посмотреть сообщение
l = l[2:] + [l[0], l[1]]
Ну, если n - 200000, вроде бы не очень страшно, но, с учетом split`а (он вроде бы не очень быстрый) и остального, может и не пройти.
Сейчас подумаю, как оптимизировать (я особо то и условий не читал)
0
30.09.2019, 17:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2019, 17:11
Помогаю со студенческими работами здесь

Сбор информации из ВК
Доброго времени суток. Нам нужна Ваша огромная помощь. Требуется составить программу для сбора...

Сбор данных по телнету
Здравствуйте уважаемые Программисты!Нужна помощь,есть список ip нескольких пк,проблема в том что их...

Сбор данных о правах пользователей на директории на файловом сервере
Есть корпоративный файловый сервер(Win). Есть мой ПК в том же домене. Прав админа у меня нет, но...

"Фруктовая машина" В этой игре задействованы яблоки, вишни, груши, сливы, малина и шоколадки
&quot;Фруктовая машина&quot; В этой игре задействованы яблоки, вишни, груши, сливы, малина и шоколадки....

Сбор ПК
С процессором я то уже разобрался (Процессор AMD FX-6300 3.5GHz/14MB/2600MHz), но вот с материнкой...

Сбор пк
Здравствуйте, собираю пк немогу определится с корпусом) Вот приметил себе корпус 2E Gaming Fera и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru