На числовой прямой даны три отрезка:
тождественно истинна, то есть принимает
Логическое ИЛИ истинно, если истинно хотя бы одно утверждение. Введем обозначения:
Применив преобразование импликации, получаем:
Логическое ИЛИ истинно, если истинно хотя бы одно утверждение. Условию
Ответ: 5.
Примечание 1.
О длине отрезка написано в примечании к задаче 11119.
Примечание 2.
Предостерегаем читателей от решения этой и подобных задач с помощью программ, реализующих метод перебора. В программах, которые предлагают наши читатели, в качестве границ отрезка используются целые числа, и длина отрезка определяется как разность между ними. Такие программы будут давать неверный результат, если интервал А не является отрезком, то есть одна или обе из его границ ему не принадлежат.
Приведём решение Льва Андреева на языке Python.
def f(x, a1, a2):
p = 10 <= x <= 40
q = 5 <= x <= 15
r = 35 <= x <= 50
a = a1 <= x <= a2
return ((a) or (p)) or ((q) <= (r))
nums = [i for x in [5,15,10,40,35,50] for i in [x-0.1, x, x+0.1]]
ans = []
for a1 in nums:
for a2 in nums:
if a1 <= a2 and all([f(x, a1, a2) for x in nums]):
ans += [a2 - a1]
print(round(min(ans)))
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 10..40;var Q := 5..15;var R := 35..50;
var setX:=|P.First,P.Last,Q.First,Q.Last,R.First,R.Last,-999,999|
.SelectMany(x->|x-0.1,x,x+0.1|);
setX.Order.Combinations(2).Select(m->m[0]..m[1])
.Where(A->setX.All(x->
((x in A)or(x in P))or((x in Q)<=(x in R))
)).Min(A->A.Size).Round.Print;
end.

