Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Олимпиада по программированию

Максим Кириллов Ученик (82), открыт 2 недели назад
Загадано некоторое натуральное число. О нём сделаны три утверждения:

Это число больше A
и меньше B
;
Это число не больше C
или не меньше D
;
Это чётное число, и оно больше E
.
Все три утверждения ложны.
Требуется определить, какое наименьшее натуральное число могло быть загадано (или что такого числа не существует). Вам нужно найти ответ для нескольких наборов входных данных.

Входные данные
В первой строке входных данных вводится целое число T
— количество наборов входных данных (1≤T≤1000
).

В каждой из следующих T
строк вводятся через пробел пять целых чисел A
, B
, C
, D
, E
(0≤A,B,C,D,E≤109
).

Выходные данные
Для каждого набора входных данных выведите наименьшее натуральное число, которое могло быть загадано. Если таких чисел нет, то выведите -1.

Система оценки
Решения, работающие при T=1
и A,B,C,D,E≤100
, будут оцениваться из 40 баллов.
1 ответ
Николай Веселуха Высший разум (368777) 2 недели назад
 #include <iostream> 
#include <vector>

using namespace std;

class Num {
int a;
int b;
int c;
int d;
int e;
int search() const {
const auto m = max();
for (auto n = 1; n < m; ++n) if (is_false(n)) return n;
return -1;
}
bool is_false(const int n) const {
auto first = !(a < n && n < b);
auto second = !(c <= n || n <= d);
auto third = !((~n & 1) && e < n);
return first && second && third;
}
int max() const {
if (a == c) return a;
return a < c ? c : a;
}
friend istream& operator>>(istream& inp, Num& n) {
return inp >> n.a >> n.b >> n.c >> n.d >> n.e;
}
friend ostream& operator<<(ostream& out, const Num& n) {
return out << n.search();
}
public:
Num() : a(0), b(0), c(0), d(0), e(0) {}
};

int main() {
size_t t;
cin >> t;
vector<Num> nums(t);
for (auto& num : nums) cin >> num;
for (const auto& num : nums) cout << num << '\n';
}
Похожие вопросы