permanent - это программа для расчёта перманента матрицы с помощью формулы Райзера со сложностью O(2^n*n^2). Однако элементами матрицы могут быть не только обычные числа, но и многочлены от произвольного числа переменных.
Под многочленом мы понимаем арифметическое выражение, записанное с использованием знаков +
, -
, *
и ^
с операторами-многочленами от переменных и скобок (второй член в операторе ^
должен быть целым положительным числом, при этом первый не должен быть числом), не содержащее пробелов. Переменной считается любая последовательность символов, не содержащая знаков арифметических выражений и содержащая хотя бы один символ, отличный от 0...9
и точки. Всякая переменная, как и всякое число, считается многочленом.
Знак умножения не может быть опущен: так, 1.5x
- неверная конструкция, программа воспримет это как единую переменную. Правильно: 1.5*x
.
Программа читает из стандартного входного потока, и выдаёт результат в стандартный выходной поток. Во входной поток необходимо сначала передать число n
- размер матрицы, у которой считается перманент (при n > 14
программа работает слишком долго). Далее должны следовать n
строк, содержащие n
многочленов, разделённых пробелами. Вывод состоит из одного многочлена - перманента введённой матрицы.
Например:
\\stdin
3
(semen+svyat)^2 x 1
(semen-svyat)^2 0 1
1*ivan_kazmenko 1 0
\\stdout
2*svyat^2+2*semen^2+x*ivan_kazmenko
Я не знаю :)