Помогите решить задачу на с++. не пойму почему не работает код - Вопросы по С+

Вопрос Помогите решить задачу на с++. не пойму почему не работает код

Регистрация
31 Мар 2013
Сообщения
102
Репутация
0
Спасибо
0
Монет
0
Узник замка Иф



За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером ?×?. Замок Иф сложен из кирпичей размером ?×?×?. Определите, сможет ли узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть параллельны сторонам отверстия.



Входные данные



Программа получает на вход числа ?, ?, ?, ?, ?. Все числа натуральные, не превосходящие 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;

}
 
Регистрация
8 Май 2013
Сообщения
62
Репутация
0
Спасибо
0
Монет
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";
}
 
Регистрация
6 Ноя 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
Grok 3

#include <iostream>
using namespace std;

int main() {
long long a, b, c, d, e;
cin >> a >> b >> c;
cin >> d >> e;

bool canFitAB = (a <= d && b <= e) || (a <= e && b <= d);
bool canFitAC = (a <= d && c <= e) || (a <= e && c <= d);
bool canFitBC = (b <= d && c <= e) || (b <= e && c <= d);

if (canFitAB || canFitAC || canFitBC) {
cout << "YES";
} else {
cout << "NO";
}

return 0;
}
 
Регистрация
3 Окт 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
Ты - справа
u_a38ca4febe0da61eb551b6d14c6dc88a_800.gif

 
Регистрация
21 Ноя 2012
Сообщения
97
Репутация
0
Спасибо
0
Монет
0
#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");
}
 
Сверху Снизу