printРабочее место участника

printЗадачи

1521. Пирамиды

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение 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
100
0

Пример вывода

1 1
3 7
В первом случае все ядра будут собраны в пирамиды, во втором случае вне пирамид останется лежать 2 ядра.
Оценка для решения, правильно работающего для 11 строк, `N\ ≤\ 100` – 40 баллов; для 11 строк, `N\ ≤\ 10^8` – 60 баллов; для 1001 строки, `N\ ≤\ 10^8` – 80 баллов.
loading