Помогите решить задачу на с++. Не пойму почему не работает код
Узник замка Иф
За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером 𝐷×𝐸. Замок Иф сложен из кирпичей размером 𝐴×𝐵×𝐶. Определите, сможет ли узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть параллельны сторонам отверстия.
Входные данные
Программа получает на вход числа 𝐴, 𝐵, 𝐶, 𝐷, 𝐸. Все числа натуральные, не превосходящие 10000.
Выходные данные
Программа должна вывести слово YES или NO.
Примеры
Ввод
Вывод
1
1
1
1
1
YES
2
2
2
1
1
NO
Моя идея в том чтобы сравнить площадь отверстия и если она меньше площади каждой из сторон, то выводим NO. Но код не проходит тест.
Решения с сравнениями длин сторон видел, но хотелось бы довести свое решение до конца(если такое возможно):
#include <iostream>
using namespace std;
int main(){
long long a, b, c, d, e;
cin>>a>>b>>c;
cin>>d>>e;
if (d*e<a*b && d*e<a*c && d*e<b*c){
cout<<"NO";
}
else{
cout<<"YES";
}
return 0;
}
Использовать только площади не получится: разные сочетания длин дают одинаковую площадь. Нужна именно проверка длин сторон.
#include <bits/stdc++.h>
using namespace std;
int main() {
long long A, B, C, D, E;
if (!(cin >> A >> B >> C >> D >> E)) return 0;
long long brick[3] = {A, B, C};
long long hole [2] = {D, E};
sort(brick, brick + 3); // brick[0] <= brick[1] <= brick[2]
sort(hole , hole + 2); // hole [0] <= hole [1]
if (brick[0] <= hole[0] && brick[1] <= hole[1])
cout << "YES\n";
else
cout << "NO\n";
}
#include <iostream>
#include <set>
using namespace std;
struct Brick {
multiset<unsigned> sides;
friend istream& operator>>(istream& inp, Brick& brick) {
brick.sides.clear();
unsigned side;
for (size_t i = 0; i < 3; ++i) {
inp >> side;
brick.sides.insert(side);
}
return inp;
}
};
struct Hole {
multiset<unsigned> sides;
friend istream& operator>>(istream& inp, Hole& hole) {
hole.sides.clear();
unsigned side;
for (size_t i = 0; i < 2; ++i) {
inp >> side;
hole.sides.insert(side);
}
return inp;
}
bool is_passes(const Brick& brick) {
auto it_hole = sides.begin();
auto it_brick = brick.sides.begin();
return *it_brick <= *it_hole
&& *next(it_brick) <= *next(it_hole);
}
};
int main() {
Brick brick;
Hole hole;
cin >> brick >> hole;
puts(hole.is_passes(brick) ? "YES" : "NO");
}
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int k[5]; cout<<"A B C D E: ";
for(int &i:k)cin>> i; sort(k,k+3); sort(k+3,k+5);
cout<<(k[1]<=k[4]&&k[0]<=k[3]?"YES":"NO")<<endl;}
Подсчет площадей решения не даст.
Узник замка Иф не выбрался через подкоп. Он выбрался через смерть.
Я уже подозреваю, что тексты задач пишет нейросеть.