При наборе этого ответа я забыл о части "F (n ^ 3)".Возможно, для извлечения «чисел» (см. Ниже) из входных данных требуется алгоритм n ^ 3.
Главное, что следует здесь отметить, это то, что вы не должны создавать все возможные заполненные матрицы.Выход - только одно число.Так что, если вы сможете найти правильное уравнение, то это будет ваш «алгоритм».
Еще одна вещь, на которую стоит обратить внимание, это то, что ваши входные данные не имеют отношения к всем позициям этих непустых ячеек.Все, что имеет значение, это эти девять чисел:
- количество соло 1 (у которых нет парных -1 ни в строке, ни в столбце),
- количество соло -1,
- количество пар одиночных строк (где ни 1, ни -1 не связаны в столбце)
- количество пар одиночных столбцов (аналогично предыдущему, но транспонировано)
- количество пустыхстроки
- количество пустых столбцов
- количество парных триплетов, которые пропускают 1, чтобы создать парный квадруплет
- количество парных триплетов, которые пропускают -1, чтобы создать парный квадруплет
- количество парных четверок
Вот эти семь случаев в концептуальной матричной форме, которые не будут иметь смысла, если вы не поняли их в письменной форме:
1 0 | -1 0 | 1 -1 | 1 0 | 0 0 | 0 | 1 -1 | -1 1 | 1 -1
0 | 0 | 0 0 | -1 0 | | 0 | -1 0 | 1 0 | -1 1
Вы должны извлечь первые восемь чисел из этих девяти из вашего ввода, и это уже хорошая работа.Последний не так важен, потому что этот четверка уже заполнена и «не может быть объединена».
Вы также должны выяснить, как использовать восемь чисел.В основном вам нужно выяснить, какие из этих концептуальных фрагментов матрицы можно «объединить» вместе, чтобы получить полный фрагмент матрицы (без пробелов), а затем найти количество способов, которыми эти фрагменты могут быть заполнены оставшимися единицами и -1, и умножить всеэти цифры.
Последняя часть - операция по модулю, но эта часть проста.Убедитесь, что перед вами только умножения, и после каждого умножения применяйте операцию по модулю.Самый большой продукт может быть 99999993 * 500 = 49999996500, который больше, чем максимальное 32-разрядное целое число, но не больше, чем максимальное 64-разрядное целое число.Так что проще всего здесь сделать все операции в 64-битной арифметике.
РЕДАКТИРОВАТЬ: я только что понял, что этот ответ не является полностью полным или даже правильным.Я думал, что фрагменты матрицы могут быть объединены простыми и понятными способами, только парами, но могут быть бесконечные комбинации длинных полос слияний.(многие соло 1 могут быть объединены вместе, а не только два).Так что нет простого уравнения в конце.Возможно, вы все еще можете использовать концепцию ответа, но только с большим количеством кода.