https://coderun.yandex.ru/problem/space-settlement/description Легкая

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.StringTokenizer
import kotlin.math.min

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    val tokenizer = StringTokenizer(reader.readLine())
    val n = tokenizer.nextToken().toLong()
    val a = tokenizer.nextToken().toLong()
    val b = tokenizer.nextToken().toLong()
    val w = tokenizer.nextToken().toLong()
    val h = tokenizer.nextToken().toLong()

    fun canFit(d: Long, width: Long, height: Long): Boolean {
        val newWidth = width + 2 * d
        val newHeight = height + 2 * d
        val cols = w / newWidth
        val rows = h / newHeight
        return cols * rows >= n
    }

    fun maxProtection(): Long {
        var left = 0L
        var right = min(w, h)
        while (left < right) {
            val mid = (left + right + 1) / 2
            if (canFit(mid, a, b) || canFit(mid, b, a)) {
                left = mid
            } else {
                right = mid - 1
            }
        }
        return left
    }

    writer.write(maxProtection().toString())
    writer.newLine()
    reader.close()
    writer.close()
}