{
    \parindent=1cm
    \begin{tabular}{l@{\extracolsep{1cm}}l}
         Идея: & Павел Кунявский\\
         Разработка: & Борис Минаев\\
     \end{tabular}
}

Вместо $n$ массивов длины $k$ будем генерировать один массив длины $n \cdot k$. $i$-й элемент в этом массиве будет обозначать, на каком кубике расположено $i$-е по возрастанию число. 

Результаты получаются довольно хорошими, если генерировать массив следующим образом. Разобьем его на $k$ частей. В каждой части запишем случайную перестановку чисел от 1 до $n$. Теоретически существует хороший ответ, который соответствует такой конструкции, но чтобы его сгенерировать, должно очень сильно повезти с выбором перестановок. 

Рассмотрим два способа улучшить такой ответ. Первый~--- написать алгоритм имитации отжига, который меняет два случайных элемента внутри одной перестановки. Чаще всего он сможет найти удовлетворяющий ответ за несколько секунд.

Другой способ заключается в том, чтобы подобрать еще более лучшую конструкцию. Все блоки по $n$ чисел можно разбить на пары соседних. В каждой паре вторую перестановку сделаем такой же, как первую, только зеркально отраженную. Это уже показывает хороший результат. Чтобы еще сильнее его улучшить, можно воспользоваться алгоритмом локальных оптимизаций, который меняет случайные числа из перестановок, а также обновляет соседнюю, чтобы сохранялась зеркальность.

Поскольку всего в задаче только четыре теста, если ваше решение работает долго, можно локально сгенерировать ответы и сохранить их в программу.

Много интересных фактов про эту задачу можно прочитать на сайте \url{http://www.ericharshbarger.org/dice/go\_first\_dice.html}.
