Ctrl K

Усиливаем наименьшее k раз

Сложная
Дан массив values и числа rounds и factor. Проведите rounds раундов; в каждом раунде найдите наименьшее число массива (если таких несколько — самое левое) и умножьте его на factor. После всех раундов замените каждое число его остатком от деления на 10⁹ + 7 и верните получившийся массив. Раундов может быть до 10⁹, так что прямое моделирование не успеет. Обратите внимание: остаток берётся только в самом конце, а пока идут раунды, сравниваются настоящие (огромные) значения.
Пример 1
values=[3, 1, 4], rounds=4, factor=3 → [9, 9, 12]

[3, 1, 4] → [3, 3, 4] → [9, 3, 4] (из двух троек берём левую) → [9, 9, 4] → [9, 9, 12]. Все числа меньше 10⁹ + 7, остаток их не меняет.

Пример 2
values=[500000000, 7], rounds=3, factor=10 → [500000000, 7000]

7 → 70 → 700 → 7000: после трёх раундов массив [500000000, 7000], остаток ничего не меняет.

Пример 3
values=[1000000000, 1000000000], rounds=3, factor=2 → [999999979, 999999993]

Получится [4·10⁹, 2·10⁹]; по модулю 10⁹ + 7 это 999999979 и 999999993.

Ограничения
  • 1 ≤ len(values) ≤ 10⁴
  • 1 ≤ values[i] ≤ 10⁹
  • 1 ≤ rounds ≤ 10⁹
  • 1 ≤ factor ≤ 10⁶
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамая загруженная переговорка СложнаяЯщики через мостик СложнаяХватит ли мест в шаттле СредняяНесведённые заявки на бирже СредняяРазобрать стопки поровну Лёгкая
загружаем Python…
Вход
values=[3, 1, 4], rounds=4, factor=3
Ожидается
[9, 9, 12]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 5 тестов на сервере, включая скрытые.