Напишите решение задачи ("Драконий покер")

Рейтинг: -8Ответов: 1Опубликовано: 12.04.2023

Драконий покер - сложная игра и в нем есть специальный раунд, где требуется сбросить ровно n карт, для того что бы набрать нужное количество баллов. Карты требуется сбрасывать как можно быстрее. У игрока не может быть больше чем m карт. Изначально карт у игрока нет. Игрок может взять ровно m карт за a секунд, или добрать всего одну карту за b секунд. Сброс одной карты занимает ровно одну секунду. Помогите посчитать, за какое минимальное время игрок сможет сбросить ровно n карт. Нельзя добрать карту, если у игрока уже m карт. Формат входных данных В строке находятся четыре целых числа n, m, a и b (1 <= n, m, a, b <= 10^4) — число карт, которое сбросить, максимальное количество карт, которое может быть у игрока, время за которое можно взять из колоды ровно m карт, и время за которое можно взять всего одну карту из колоды. Формат выходных данных Выведите одно число — минимальное время, которое понадобится игроку, что бы сбросить ровно n карт. Пример

стандартный ввод
3 2 1 1

стандартный вывод
5

Замечание В тесте из условия требуется один раз полностью взять m карт, два раза сбросить по одной карте, потом добрать одну карту из колоды и сбросить ее.

Есть такой пример моего кода, но больше примера он не проходит, почему ?

n,m,a,b = map(int, input ().split())
time = 0
cart = 0

while n > 0:
    if cart + m > m:
        n-=1
        cart -= 1
        time += 1
    else:
        if n - 1 == 0 and b <= a:
            cart += 1
            time += b
        else:
            cart += m
            time += a

print(time)

Ответы

▲ 2Принят

Попробуем по-простому:

n + min( (n//m)*a+(n%m)*b, ((n+m-1)//m)*a,   n*b)

Три случая - пачки по m + остаток по одной, все карты набраны в пачках с возможным перебором в последний раз (когда b велико), все карты берутся по одной (когда a велико)