https://coderun.yandex.ru/problem/tiles/description Легкая

Условие

План для выкладки плитки в новой квартире Пети выглядит следующим образом: в прямоугольной комнате размером n×mn×m (n ≥ m) плитка выкладывается квадратами 1 × 1, причём все квадраты, касающиеся стен, должны быть чёрного цвета, а все остальные — белого.

Петя купил плитку раньше, чем сделал планировку. У него есть W белых и B чёрных квадратов плитки. От вас требуется найти размеры комнаты, пол которой потребует ровно имеющееся количество квадратов плитки.

Гарантируется, что решение существует и уникально.

Примеры

Ввод: 8 1 Вывод: 3 3

Ввод: 10 2 Вывод: 4 3

Ввод: 12 4 Вывод: 4 4

Решение

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

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    // Читаем количество чёрных и белых плиток
    val (b, w) = reader.readLine().split(" ").map { it.toInt() }
    
    // Функция подсчёта чёрных и белых плиток для размеров n×m
    fun countTiles(n: Int, m: Int): Pair<Int, Int> {
        val total = n * m
        val black = if (n == 1 && m == 1) 1 else 2 * (n + m - 2)
        val white = total - black
        return black to white
    }
    
    // Перебираем возможные размеры
    for (m in 1..b) {  // m не может быть больше B, так как минимум 2m чёрных
        for (n in m..b) {  // n ≥ m по условию
            val (black, white) = countTiles(n, m)
            if (black == b && white == w) {
                writer.write("$n $m")
                writer.newLine()
                reader.close()
                writer.close()
                return
            }
        }
    }
}