Решение
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()
}