Задача
Размеры шкафа [latex] a \times b \times c [/latex]. Возможно ли его пронести через дверной проём с размерами [latex]x \times y[/latex]? Считается, что шкаф проходит в проем, если размеры, которыми его будут вносить сквозь дверь, не больше соответствующих размеров двери.
Входные данные
Целые числа [latex] a, b, c, x, y (1 ≤ a, b, c, x, y ≤ 100)[/latex].
Выходные данные
Вывести строку «YES«, если шкаф пронести возможно, и «NO» если нельзя.
Тесты
№ | Ввод | Вывод |
1 | 4 5 6 10 20 | YES |
2 | 4 5 6 3 4 | NO |
3 | 12 3 4 5 6 | YES |
4 | 12 3 6 5 6 | YES |
5 | 12 3 7 5 6 | NO |
Код программы
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> using namespace std; int main() { int a, b, c, y, x; std::cin >> a >> b >> c >> y >> x; if ((a<=y && b<=x) || (a<=x && b<=y) || (a<=y && c<=x) || (a<=x && c<=y) || (b<=y && c<=x) || (b<=x && c<=y)) cout << "YES"; else cout << "NO"; return 0; } |
Либо
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; bool skf(int q, int w, int e, int r){ return ((q<=e && w<=r) || (q<=r && w<=e)); } int main(){ int a, b, c, x, y; cin >> a >> b >> c >> x >> y; if (skf(a, b, x, y) || skf(b, c, x, y) || skf(a, c, x, y)) cout << "YES"; else cout << "NO"; return 0; } |
Без условных операторов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> using namespace std; bool skf(int q, int w, int e, int r){ return ((q<=e && w<=r) || (q<=r && w<=e)); } int main (){ int a, b, c, x, y; cin >> a >> b >> c >> x >> y; (skf(a, c, x, y) or skf(b, c, x, y) or skf(a, b, x, y)) && cout << "YES"; !(skf(a, c, x, y) or skf(b, c, x, y) or skf(a, b, x, y)) && cout << "NO"; return 0; } |
Решение задачи
Очевидно, шкаф будет будет проходить через дверной проём тогда, когда две любые его стороны (в силу того, что шкаф в пространстве возможно повернуть любой из сторон) будут меньше размеров проёма. Таким образом, путём сравнения мы можем сделать вывод относительно того, пройдёт ли шкаф через проём.