Задача на с++
За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером D×E. Замок Иф сложен из кирпичей размером A×B×C. Определите, сможет ли узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть параллельны сторонам отверстия.
Входные данные:
Программа получает на вход числа A, B, C, D, E. Все числа натуральные, не превосходящие 10000.
Выходные данные:
Программа должна вывести слово YES или NO.
Примеры
Ввод
1
1
1
1
1
Вывод
YES
Ввод
2
2
2
1
1
Вывод
NO
--------------------------------------------------------------------------------------------------------------------------------------
Я написал такой код
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
if (d * e >= a * b || d * e >= a * c || d * e >= b * c) {
cout << "YES";
}
else {
cout << "NO";
}
}
Сайт почему-то показывает что мой код прошел 3 проверки, а на 4й ответ не такой, не понимаю что здесь не так
Проверка по площади не верна. Кирпич может быть километровым но толщиной в 1 ангстрем. Алгоритм - сравнение двух меньших сторон кирпича со сторонами отверстия.
спасибо, попробовал вот это и помогло:
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
if (a > b) {
a = a + b;
b = a - b;
a = a - b;
}
if (b > c) {
b = b + c;
c = b - c;
b = b - c;
}
if (a > b) {
a = a + b;
b = a - b;
a = a - b;
}
if (d >= a && e >= b || e >= a && d >= b) {
cout << "YES";
}
else {
cout << "NO";
}
}
#include <algorithm>
#include <iostream>
using namespace std;
class Brick {
public:
pair<double, double> least()const {
pair<double, double> box;
box.first = min(a, b);
box.second = max(a, b);
if (c < box.first) {
box.second = box.first;
box.first = c;
} else if (c < box.second) {
box.second = c;
}
return box;
}
private:
double a;
double b;
double c;
friend istream& operator>>(istream& inp, Brick& brick) {
return inp >> brick.a >> brick.b >> brick.c;
}
};
class Hole {
public:
bool ispasses(const Brick& brick)const {
const auto [first, second] = brick.least();
return first <= min(a, b) && second <= max(a, b);
}
private:
double a;
double b;
friend istream& operator>>(istream& inp, Hole& hole) {
return inp >> hole.a >> hole.b;
}
};
int main() {
Brick brick;
cin >> brick;
Hole hole;
cin >> hole;
puts(hole.ispasses(brick) ? "YES" : "NO");
} Попробуй такое усливие
a >= d && b >= e || a >= e && b >= d || b >= d && c >= e || b >= e && c >= d
Великолепная задача, удачи.