Марсианская оптимизация
Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
В марсианском языке программирования Mars# сложение реализовано функцией
sum, принимающей два аргумента и возвращающей их сумму.
Реализация требует много памяти для каждого вызова,
в связи с чем в марсианских программах часто возникает опасность переполнения стека.
Марсианскому программисту понадобилось посчитать сумму `N` переменных.
Чтобы предотвратить переполнение стека, ему необходимо
как можно сильнее уменьшить максимальную глубину вложенных вызовов функции.
Помогите запрограммировать оптимальный вызов функции sum.
Математические свойства функции sum сохранены в марсианской реализации,
поэтому при вызове можно произвольно менять порядок слагаемых.
Например, для вычисления суммы переменных a b c d e возможны, в частности,
следующие варианты вызова функции:
sum(c,sum(e,sum(a,sum(d,b))))
sum(b,sum(sum(d,a),sum(c,e)))
sum(sum(sum(d,e),b),sum(c,a))
Второй и третий варианты являются оптимальными, так как в них максимальная
глубина вложенных вызовов функции минимальна.
В языке Mars# длина имён переменных составляет от одного до восьми символов.
Имена переменных состоят из латинских букв.
Ввод
В первой строке входного файла содержится число `N`.
В следующих далее `N` строках содержатся имена переменных.
Вывод
В выходном файле должна содержаться единственная строка – сгенерированный
вызов функции sum, записанный без пробелов.
Аргументы в вызове функции заключаются в круглые скобки
'(' (ASCII 40) и ')' (ASCII 41) и
разделяются единственным символом ',' (ASCII 44).
Если существует несколько оптимальных решений, вывести любое из них.
Ограничения
`2\ ≤\ N\ ≤\ 10^5`
Пример ввода 1
5
a
b
z
x
y
Пример вывода 1
sum(z,sum(sum(b,x),sum(y,a)))
Пример ввода 2
6
a
bb
ccc
p
qq
rrr
Пример вывода 2
sum(sum(sum(a,p),sum(bb,qq)),sum(ccc,rrr))
Источник: А. Жуплев, ДВГУ, Весенний турнир, 2007