Форум » Логические выражения » Задача №4602 » Ответить

Задача №4602

sglazkov: Ниже представлен мой код на питоне, который решает задачу перебором возможных вариантов отрезков. Самый максимальный отрезок: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57] В нем 27 элементов, однако его длина = 26 (длина отрезка - это разница конечной и начальной координаты). В ответе не 26, а 27. Почему? p = [j for j in range(20, 31)] q = [j for j in range(25, 58)] max_a = [] for start in range(-70, 71): for end in range(start + 1, 71): a = [j for j in range(start, end + 1)] s = 0 for x in range(-100, 100): s += ((x in a) and ((x in q) <= (x in p))) if s == 0: if len(a) > len(max_a): max_a = a.copy() print(max_a)

Ответов - 7

Поляков: Задача 4602 совсем другая. Уточните, пожалуйста условие. Не рекомендую решать такие задачи программой. Вы пройдете по всем граблям, связанным с дискретизацией непрерывных отрезков.

kotmak: Видимо, имелась виду задачам 4601, но я тоже к слову не понимаю почему так.

Поляков: По 4601: 1) A*(not(Q) + P) = 0 2) not(A) + Q*not(P) = 1 3) Amax = Q*not(P) = (30; 57] Все.


Nadin: Тоже вопрос по 4601 Если мы подставим число 30 в исходную формулу, то получится истина. Ответ [31; 57] Q*not(P) - это же [31; 57]

Поляков: Nadin пишет: Q*not(P) - это же [31; 57] Если написать совсем правильно, то (30; 57] (исключая левую границу). И длина этого отрезка - 57 - 30 = 27. В таких задачах спрашивается именно про длину отрезка, чтобы не ломать голову по поводу вхождения или невхождения его концов в искомое множество.

Nadin: А, например, в номере 4769 получается ответ [1; 98] и длина равна 97. Получается, что включительно, что нет, все равно вычитаем из правой границы левую?

Поляков: Nadin пишет: Получается, что включительно, что нет, все равно вычитаем из правой границы левую? Именно так. Сложнее, если два отрезка получаются. Там зависит от задачи: либо нужно выбрать наибольший, либо перекрыть оба одним отрезком А.



полная версия страницы