Тема . Практика Программирования

.03 Простейшие программы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела практика программирования
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#45093

В доме у Виктории Ю. внезапно поломалась вся техника, из-за чего Виктория начала плакать. Когда фиксики об это узнали, они взяли помогаторы и примчались спасать Викторию. Виктория начнет радоваться, как только будет починена вся техника в ее доме. Пока фиксики работают, они тратят по одному проценту своего запаса сил в минуту. Когда запас сил становится равен 20%  , фиксики уходят на зарядку, пока не наберут 80%  (на это требуется 2  минуты), потом они продолжают работать. Фиксики стараются починить сначала те приборы, которые требуют меньше всего времени. После починки самого последнего прибора фиксики заряжаются, чтобы улететь к ДимДимычу.

Во входном файле вы получаете число n  — количество приборов в доме у Виктории, затем n  чисел — время починки каждого отдельного прибора. Определите какое количество времени в минутах понадобится фиксикам, чтобы Виктория заулыбалась, если начальный заряд фиксиков 70%

Вложения к задаче
Показать ответ и решение

Решение №1

n = int(input())
counter = 0
ener = 70
a = []
for i in range(n):
    a.append(int(input()))
a.sort()
i = 0
while i != n:
    if (ener - a[i]) > 20:  # Без подзарядки
        counter += a[i]
        ener -= a[i]
        i += 1
    elif (ener - a[i]) == 20:  # Одна подзарядочка и идем дальше
        counter += a[i] + 2
        ener = 80
        i += 1
    else:  # Одна или несколько подзарядок в одном пункте
        counter += (ener - 20) + 2
        a[i] -= (ener - 20)
        ener = 80
print(counter + 2)  # В конце заряжается по условию

Решение №2

n = int(input())
a = []
for i in range(n):
    a.append(int(input()))
a.sort()
ener = 70
time = 0
i = 0
flag = True
while i != n:
    if a[i] - ener + 20 >= 0:
        if i == n - 1 and a[i] - ener + 20 == 0:
            flag = False
        time += min(ener - 20, a[i]) + 2
        a[i] = max(a[i] - ener + 20, 0)
        ener = 80
    else:
        time += a[i]
        ener -= a[i]
        a[i] = 0
    if a[i] == 0:
        i += 1
if flag:
    time += 2
print(time)

Ответ: 1073

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!