https://coderun.yandex.ru/problem/restore-the-matrix/description Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Читаем размер матрицы
    val n = reader.readLine().toInt()
    
    // Читаем матрицу-шаблон
    val matrix = Array(n) { IntArray(n) }
    for (i in 0 until n) {
        val row = reader.readLine().split(" ").map { it.toInt() }
        for (j in 0 until n) {
            matrix[i][j] = row[j]
        }
    }

    // Собираем все ненулевые значения (помеченные ячейки)
    val usedNumbers = mutableSetOf<Int>()
    for (i in 0 until n) {
        for (j in 0 until n) {
            if (matrix[i][j] != 0) {
                usedNumbers.add(matrix[i][j])
            }
        }
    }

    // Формируем список всех чисел от 1 до n^2, которые еще не использованы
    val remainingNumbers = mutableListOf<Int>()
    for (num in 1..n * n) {
        if (num !in usedNumbers) {
            remainingNumbers.add(num)
        }
    }

    // Заполняем матрицу: оставляем помеченные ячейки, заполняем нули оставшимися числами
    var index = 0
    val result = Array(n) { IntArray(n) }
    for (i in 0 until n) {
        for (j in 0 until n) {
            if (matrix[i][j] != 0) {
                result[i][j] = matrix[i][j]
            } else {
                result[i][j] = remainingNumbers[index]
                index++
            }
        }
    }

    // Выводим результат
    for (i in 0 until n) {
        writer.write(result[i].joinToString(" "))
        writer.newLine()
    }

    reader.close()
    writer.close()
}