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
}
}
}
}