https://coderun.yandex.ru/problem/checkered-board Средняя

Решение

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 (nStr, kStr) = reader.readLine().split(" ")
    val n = nStr.toInt()
    val k = kStr.toInt()

    if (k == 1) {
        if (n == 1) {
            writer.write("Yes")
            writer.newLine()
            writer.write("1")
        } else {
            writer.write("No")
        }
        writer.flush()
        return
    }

    if ((n.toLong() * n) % k != 0L) {
        writer.write("No")
        writer.flush()
        return
    }

    var useDiag = false
    var blockT = 0
    var blockS = 0

    if (n % k == 0) {
        useDiag = true
    } else {
        run outer@{
            for (d in 2..k) {
                if (k % d != 0) continue
                val s = k / d
                if (s <= 1) continue
                if (n % d == 0 && n % s == 0) {
                    blockT = d
                    blockS = s
                    return@outer
                }
            }
        }
        if (blockT == 0) {
            writer.write("No")
            writer.flush()
            return
        }
    }

    writer.write("Yes")
    writer.newLine()
    val sb = StringBuilder()
    for (i in 0 until n) {
        sb.setLength(0)
        for (j in 0 until n) {
            val color = if (useDiag) {
                ( (i + j) % k ) + 1
            } else {
                ( (i % blockT) * blockS + (j % blockS) ) + 1
            }
            sb.append(color)
            if (j + 1 < n) sb.append(' ')
        }
        writer.write(sb.toString())
        writer.newLine()
    }
    writer.flush()
}