Алекс і квадрати орігамі#7612

Алекс і квадрати орігамі (Розбір)

При необхідності повернемо прямокутник так, щоб його ширина була не меншою за висоту. Розглянемо всі можливі варіанти розташування трьох квадратів.

Випадок 1. Довжина сторони квадрата дорівнює :

Випадок 2. Якщо w \u003c 3h, то довжина сторони квадрата дорівнює :

Випадок 3. Якщо w \ge 3h, то довжина сторони квадрата дорівнює :

Залишається вибрати з трьох випадків максимально можливу довжину сторони квадрата.

max(h / 2, h) = h
max(h / 2, w / 3)

Реалізація алгоритму

Читаємо вхідні дані

scanf("%lf %lf",\u0026w,\u0026h);

Нормалізуємо прямокутник так, щоб його ширина була не меншою за висоту .

if (w \u003c h)
  temp = w, w = h, h = temp;

Обчислюємо та виводимо відповідь.

if (w \u003e= 3*h) res = h;
else res = max(h/2, w/3);
printf("%.3lf\n",res);

Java реалізація

import java.util.*;

public class Main
{
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    double w = con.nextDouble();
    double h = con.nextDouble();
    if (w \u003c h)
    {
      double temp = w;
      w = h;
      h = temp;
    }
    double res;
    if (w \u003e= 3*h) res = h;
    else res = Math.max(h/2, w/3);
    
    System.out.printf("%.3f\n",res);      
  }
}

Python реалізація

Читаємо вхідні дані

w, h = map(float, input().split())

Нормалізуємо прямокутник так, щоб його ширина була не меншою за висоту .

if w \u003c h:
  w, h = h, w

Обчислюємо та виводимо відповідь.

if w \u003e= 3 * h:
  res = h
else:
  res = max(h / 2, w / 3)
print(res)