Задача "Розы" — Объяснение решения

Revision ru7, by Kolyanchick, 2022-11-23 09:25:09

Примечания к задаче

Розы — несложная задача, которая встречалась на Муниципальном этапе олимпиады по программированию в 2021 году в городе Казань

Условия к задаче

Данные

Имя входного файла: Стандартный ввод / input.txt\n Имя выходного файла: Стандартный вывод / output.txt Ограничение по времени: 1 секунда Ограничение по памяти: 256 мегабайт

Условие

Известный садовод Гладиолус Ромашкин выращивает розы у себя в теплице, а потом продаёт их в городе на цветочном рынке. Перед походом на рынок Ромашкин пересчитал лепестки у каждой розы и решил, что розы с k лепестками он будет продавать за r рублей. Если лепестков у розы меньше k, то отсутствие каждого из лепестков уменьшит цену на 1 рубль. Если же лепестков больше k, то такую розу Ромашкин будет продавать в 2 раза дороже, то есть за 2r рублей. К концу дня Гладиолус Ромашкин продал все n роз и хочет подсчитать свою выручку. Ваша задача — помочь ему в этом.

Формат входных данных

Первая строка содержит три целых числа k, r и n (1 ≤ k ≤ 100; k ≤ r ≤ 10⁵; 1 ≤ n ≤ 10⁵). Во второй строке записано n целых чисел aᵢ — количество лепестков каждой из роз (1 ≤ aᵢ ≤ 1000).

Формат выходных данных

Запишите одно число — выручку Гладиолуса Ромашкина.

Пример

Стандартный ввод: 10 20 3 10 5 15

Стандартный вывод: 75

Замечание

В примере Ромашкин сможет продать первую розу за 20 рублей, вторую — за 15 рублей, а третью — за 2 · 20 = 40 рублей. Общая выручка составит 20 + 15 + 40 = 75 рублей.

Объяснение задачи

Ввод

Первым делом, мы должны прописать правильный ввод данных. Реализовать ввод нескольких значений в одну строку можно при помощи встроенной функции map:

k, r, n = map(int, input().split())

Таким образом, мы присвоили переменным k, r, n значения, введя их в одну строку Тоже самое мы делаем с набором количеств лепестков роз. При этом, мы преобразуем его в список при помощи функции list:

roses = list(map(int, input().split()))

Теперь, в переменной roses хранится список, состоящий из количеств лепестков на каждой розе. Получаем код:

k, r, n = map(int, input().split())
roses = list(map(int, input().split()))

Алгоритм решения

Как же поступать дальше? На самом деле, всё очень просто. Мы просто пробегаемся по списку roses, сравнивая каждое его значение со значением переменной k.

Итак, для начала давайте заведём переменную ans, к которой мы будем прибавлять цену каждой розы, пока они не закончатся и мы не получим конечный ответ. Изначально она равна нулю:

ans = 0

Теперь с помощью цикла for пробегаемся по списку roses, сравнивая его значения со значением переменной k, и в зависимости от результата прибавляем к переменной ans цену, указанную в условии для этого результата.

for i in roses:
    if i < k:
        ans += r &mdash; (k &mdash; i) #Вычитаем из r кол-во недостающих до k лепестков и прибавляем это к ans
    elif i == k:
        ans += r #Прибавляем r к ans
    else:
        ans += 2 * r #Прибавляем 2r к ans

После этого просто выводим полученный ответ:

print(ans)

Получаем конечный код:

k, r, n = map(int, input().split())
roses = list(map(int, input().split()))
ans = 0
for i in roses:
    if i < k:
        ans += r &mdash; (k &mdash; i)
    elif i == k:
        ans += r
    else:
        ans += 2 * r
print(ans)

Вот и всё, алгоритм придуман, код готов, именно таким и является решение данной задачи

Мой комментарий

Ну что ж, вот таким вот получился мой первый разбор задач. Если вам понравилось, обязательно голосуйте плюсиком за этот разбор, мне будет очень приятно :) Если вам что-то непонятно, вы хотите предложить задачу на разбор или рассказать о вашем решении, то обязательно пишите в комментариях ваши сообщения, мне будет очень приятно с вами пообщаться! Всем удачи! :D

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
ru15 Russian Kolyanchick 2022-11-23 10:04:33 32
ru14 Russian Kolyanchick 2022-11-23 09:45:17 36
ru13 Russian Kolyanchick 2022-11-23 09:41:22 134
ru12 Russian Kolyanchick 2022-11-23 09:31:51 4
ru11 Russian Kolyanchick 2022-11-23 09:31:11 17
ru10 Russian Kolyanchick 2022-11-23 09:27:17 6 Мелкая правка: 'nput.txt**``\nИмя выхо' -> 'nput.txt**\n\n\nИмя выхо'
ru9 Russian Kolyanchick 2022-11-23 09:26:47 2 Мелкая правка: 'nput.txt**\nИмя выхо' -> 'nput.txt**``\nИмя выхо'
ru8 Russian Kolyanchick 2022-11-23 09:25:22 2 Мелкая правка: 'ut.txt**\n\nИмя выхо' -> 'ut.txt**\nИмя выхо'
ru7 Russian Kolyanchick 2022-11-23 09:25:09 2 Мелкая правка: 'ut.txt**\nИмя выхо' -> 'ut.txt**\n\nИмя выхо'
ru6 Russian Kolyanchick 2022-11-23 09:23:09 20
ru5 Russian Kolyanchick 2022-11-23 09:19:44 24
ru4 Russian Kolyanchick 2022-11-23 09:18:50 4
ru3 Russian Kolyanchick 2022-11-22 17:52:03 0 Мелкая правка: 'ментарий\n---------------\nНу что ж' -> 'ментарий\nНу что ж'
ru2 Russian Kolyanchick 2022-11-22 17:51:11 180
ru1 Russian Kolyanchick 2022-11-22 17:47:08 4253 Первая редакция (опубликовано)