Блог пользователя Kolyanchick

Автор Kolyanchick, история, 2 года назад, По-русски

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

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

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

Данные

Имя входного файла: Стандартный ввод / input.txt

Имя выходного файла: Стандартный вывод / 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 - (k - 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 - (k - i)
    elif i == k:
        ans += r
    else:
        ans += 2 * r
print(ans)

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

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

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

Если вам что-то непонятно, вы хотите предложить задачу на разбор или рассказать о вашем решении, то обязательно пишите в комментариях ваши сообщения, мне будет очень приятно с вами пообщаться!

Всем удачи! :D

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
2 года назад, # |
Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

Извиняюсь, произошёл кое-какой баг и отображение кодов и переносов не работало, я всё починил и сейчас всё выглядит аккуратно

Больше такого не повторится

»
2 года назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Спасибо за объяснение задачи, все понял