Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
После игры в "бинго" пушечные ядра нужно сложить в две непустые пирамиды.
При этом одна пирамида должна иметь квадратное основание, а другая – треугольное.
В самом верхнем слое первой пирамиды 1 ядро, во 2-м слое – 4 ядра, в 3-м слое – 9 ядер,
в `i`-м слое – `i^2` ядер. Таким образом, первая пирамида в зависимости от числа слоев
будет содержать 1, 5, 14, 30, 55, 91 и т. д. ядер.
В самом верхнем слое второй пирамиды 1 ядро, во 2-м слое – 3 ядра, в 3-м слое – 6 ядер,
в `i`-м слое – на `i` ядер больше, чем в предыдущем.
Вторая пирамида в зависимости от числа слоев будет содержать 1, 4, 10, 20, 35, 56, 84 и т. д. ядер.
Напишите программу, которая рассчитает, каким должно быть количество
слоев в первой и второй пирамиде, чтобы минимизировать количество ядер, оставшихся
лишними при собирании ядер в пирамиды.
Ввод содержит от 1 до `100\ 000` строк, каждая из которых содержит одно целое число `N` (`2\ ≤\ N\ ≤\ 10^8`) – количество
ядер, которые нужно собрать в пирамиды. Последняя строка ввода, содержащая число 0,
сигнализирует о завершении ввода и не должна обрабатываться.
Для каждого числа из ввода, кроме 0, вывести строку, содержащую два числа – количество
слоев в первой пирамиде и количество слоев во второй пирамиде, при котором количество ядер,
оставшихся лишними, минимально. Если существует несколько минимальных вариантов, вывести тот из них,
в котором количество слоев в первой пирамиде меньше.
В первом случае все ядра будут собраны в пирамиды,
во втором случае вне пирамид останется лежать 2 ядра.
Оценка для решения, правильно работающего для 11 строк, `N\ ≤\ 100` – 40 баллов;
для 11 строк, `N\ ≤\ 10^8` – 60 баллов; для 1001 строки, `N\ ≤\ 10^8` – 80 баллов.