Задача
Планировка. Можно ли на прямоугольном участке застройки размером a на b метров разместить два дома размером в плане p на q и r на s метров? Дома можно располагать только параллельно сторонам участка.
Ниже представлены одни из возможных вариантов расположения домов на участке:
a | b | p | q | r | s | Ответ |
100 | 150 | 20 | 70 | 25 | 50 | Дома могут быть построены на заданном участке. |
20 | 50 | 10 | 60 | 10 | 15 | Дома не могут быть построены. |
50 | 150 | 25 | 150 | 25 | 150 | Дома могут быть построены на заданном участке. |
50 | 150 | 50 | 75 | 50 | 75 | Дома могут быть построены на заданном участке. |
200 | 300 | 115 | 50 | 110 | 100 | Дома могут быть построены на заданном участке. |
2 | 4 | 1 | 3 | 2 | 2 | Дома не могут быть построены. |
2 | 5 | 1 | 3 | 2 | 3 | Дома не могут быть построены. |
2 | 5 | 2 | 2 | 1 | 4 | Дома не могут быть построены. |
3 | 3 | 2 | 2 | 2 | 2 | Дома не могут быть построены. |
2 | 10 | 10 | 1 | 10 | 1 | Дома могут быть построены на заданном участке при повороте на 90 градусов. |
10 | 2 | 1 | 10 | 1 | 10 | Дома могут быть построены на заданном участке при повороте на 90 градусов. |
2 | 10 | 1 | 10 | 10 | 1 | Дома могут быть построены на заданном участке при повороте дома со сторонами r s на 90 градусов. |
10 | 2 | 10 | 1 | 1 | 10 | Дома могут быть построены на заданном участке при повороте дома со сторонами r s на 90 градусов. |
10 | 2 | 1 | 10 | 10 | 1 | Дома могут быть построены на заданном участке при повороте дома со сторонами p q на 90 градусов. |
2 | 10 | 10 | 1 | 1 | 10 | Дома могут быть построены на заданном участке при повороте дома со сторонами p q на 90 градусов. |
2 | 3 | 1 | 1 | 2 | 3 | Дома не могут быть построены. |
2 | 4 | 1 | 1 | 3 | 3 | Дома не могут быть построены. |
2 | 6 | 1 | 3 | 3 | 3 | Дома не могут быть построены. |
Построенный алгоритм позволяет дать ответ: могут ли дома быть построены на участке или не могут. Стены могут стоять прямо на границе участка. В программу вводятся исходные данные сторон участка и двух домов, требующиеся для последующего ответа: могут дома быть построены или нет.
Всего у нас есть 8 вариантов расположения домов на участке.
Каждый дом можно расположить на участке двумя способами (вертикально или горизонтально). Значит всего четыре различные комбинации их расположения относительно участка. Среди этих четырёх комбинация должна существовать по крайней мере одна в которой дома помещаются. Т.е. либо суммарная ширина домов меньше ширины участка и длина каждого дома меньше его длины, либо суммарная длина домов меньше длины участка и ширина каждого дома меньше ширины участка. Поскольку выполнится должно хоть одно такое условие, то их нужно соединить логическим “или”.
Так же у нас есть 4 различных комбинации размещения домов, в которых один из домов(а может и сразу два) не помещается на участке, но если его развернуть на [latex]90^{\circ}[/latex], то дома успешно разместятся на участке.
Ниже представлен сам код(C++):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <stdio.h> int main(void) { double a, b, p, q, r, s; scanf("%lf %lf %lf %lf %lf %lf", &a, &b, &p, &q, &r, &s); printf( (a >= p && a >= r && b >= (q + s)) || // Дома стоят вдоль b (4 варианта) (a >= q && a >= r && b >= (p + s)) || (a >= p && a >= s && b >= (q + r)) || (a >= q && a >= s && b >= (p + r)) || (b >= p && b >= r && a >= (q + s)) || // Дома стоят вдоль a (4 варианта) (b >= q && b >= r && a >= (p + s)) || (b >= p && b >= s && a >= (q + r)) || (b >= q && b >= s && a >= (p + r)) ? "Могут" : "Нет\n"); } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import java.util.*; import java.lang.*; import java.io.*; class Brovko { public static void main (String[] args) throws java.lang.Exception { double a, b, p, q, r, s; Scanner in = new Scanner(System.in); a=in.nextDouble(); b=in.nextDouble(); p=in.nextDouble(); q=in.nextDouble(); r=in.nextDouble(); s=in.nextDouble(); System.out.printf( (a >= p && a >= r && b >= (q + s)) || // Дома стоят вдоль b (4 варианта) (a >= q && a >= r && b >= (p + s)) || (a >= p && a >= s && b >= (q + r)) || (a >= q && a >= s && b >= (p + r)) || (b >= p && b >= r && a >= (q + s)) || // Дома стоят вдоль a (4 варианта) (b >= q && b >= r && a >= (p + s)) || (b >= p && b >= s && a >= (q + r)) || (b >= q && b >= s && a >= (p + r)) ? "Yes" : "No\n"); } } |
Ознакомится с программой можно тут (C++)/тут (Java).
Для отправки комментария необходимо войти на сайт.