Задача на ксерокопии
прошу помочь решить следующую задачу, есть набросок и мне стыдно, что я прошу, но всё же прошу помочь довести до ума.
Сегодня утром жюри решило добавить в вариант олимпиады ещё одну, Очень Лёгкую Задачу. Ответственный секретарь Оргкомитета напечатал её условие в одном экземпляре, и теперь ему нужно до начала олимпиады успеть сделать ещё N копий. В его распоряжении имеются два ксерокса, один из которых копирует лист за х секунд, а другой — за y. (Разрешается использовать как один ксерокс, так и оба одновременно. Можно копировать не только с оригинала, но и с копии.) Помогите ему выяснить, какое минимальное время для этого потребуется.
Входные данные
На вход программы поступают три натуральных числа N, x и y, разделённые пробелом (1⩽N⩽2⋅108, 1⩽x,y⩽10). Выходные данные
Выведите одно число — минимальное время в секундах, необходимое для получения N копий.
Ввод: 4 1 1 Вывод: 3
Ввод: 5 1 2 Вывод: 4
Код:
uint64_t foo(uint64_t count, uint64_t a, uint64_t b)
{
uint64_t res { static_cast<uint64_t>(std::ceil(static_cast<double>(count * a * b) / (a + b))) };
uint64_t rem_x { res % a };
uint64_t rem_y { res % b };
if(rem_x && rem_y)
res += std::min(a - rem_x, b - rem_y);
return res;
}
uint64_t bar(uint64_t count, uint64_t a, uint64_t b)
{
if(!count)
return 0;
return std::min(a, b) + foo(--count, a, b);
}