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

Условие

В школе решили на один прямоугольный стол поставить два прямоугольных ноутбука. Ноутбуки нужно поставить так, чтобы их стороны были параллельны сторонам стола. Определите, какие размеры должен иметь стол, чтобы оба ноутбука на него поместились, а площадь стола была минимальна.

Примеры

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

Ввод: 5 7 3 2 Вывод: 9 5 5 9

Решение

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 input = reader.readLine().split(" ").map { it.toInt() }
    val a = input[0] // ширина 1-го ноутбука
    val b = input[1] // высота 1-го ноутбука
    val c = input[2] // ширина 2-го ноутбука
    val d = input[3] // высота 2-го ноутбука

    // Список для хранения возможных размеров стола (ширина, высота, площадь)
    val options = mutableListOf<Triple<Int, Int, Long>>()

    // Все комбинации поворотов ноутбуков
    val laptop1 = listOf(Pair(a, b), Pair(b, a)) // возможные размеры 1-го ноутбука
    val laptop2 = listOf(Pair(c, d), Pair(d, c)) // возможные размеры 2-го ноутбука

    for (l1 in laptop1) {
        for (l2 in laptop2) {
            val w1 = l1.first  // ширина 1-го ноутбука
            val h1 = l1.second // высота 1-го ноутбука
            val w2 = l2.first  // ширина 2-го ноутбука
            val h2 = l2.second // высота 2-го ноутбука

            // Вариант 1: рядом по горизонтали
            val widthH = w1 + w2           // сумма ширин
            val heightH = maxOf(h1, h2)    // максимум высот
            options.add(Triple(widthH, heightH, widthH.toLong() * heightH))

            // Вариант 2: рядом по вертикали
            val widthV = maxOf(w1, w2)     // максимум ширин
            val heightV = h1 + h2          // сумма высот
            options.add(Triple(widthV, heightV, widthV.toLong() * heightV))
        }
    }

    // Находим вариант с минимальной площадью
    val bestOption = options.minByOrNull { it.third }!!

    // Выводим размеры стола
    writer.write("${bestOption.first} ${bestOption.second}")

    reader.close()
    writer.close()
}