Условие
Политическая жизнь одной страны очень оживленная. В стране действует K
политических партий, каждая из которых регулярно объявляет национальную забастовку. Дни, когда хотя бы одна из партий объявляет забастовку, при условии, что это не суббота или воскресенье (когда и так никто не работает), наносят большой ущерб экономике страны.
i-я партия объявляет забастовки строго каждые b_i
дней, начиная с дня с номером a_i
. То есть i-я партия объявляет забастовки в дни a_i
, a_i + b_i
, a_i + 2 * b_i
и т.д. Если в какой-то день несколько партий объявляет забастовку, то это считается одной общенациональной забастовкой.
В календаре страны N
дней, пронумерованных, начиная с единицы. Первый день года является понедельником, шестой и седьмой дни года — выходные, неделя состоит из семи дней.
В первой строке даны числа N
и K
. Далее идет K
строк, описывающие графики проведения забастовок. i-я строка содержит числа a_i
и b_i
. Вам нужно определить число забастовок, произошедших в этой стране в течении года.
Решение
N, K = [int(s) for s in input().split()] work_days = set([day for day in range(1, N + 1) if day % 7 not in (6, 0)]) no_strikes = set(work_days) for party in range(K): a, b = [int(s) for s in input().split()] max_strikes = (N - a) // b + 1 no_strikes -= {a + b*i for i in range(max_strikes)} print(len(work_days) - len(no_strikes))
Предлагаю считать дни недели и дни года не с единицы, а с нуля.
Тогда многое упростится, например, вторая строка, сейчас
work_days = set([day for day in range(1, N + 1) if day % 7 not in (6, 0)])
станет такой:
work_days = set([day for day in range(N) if day % 7 < 5)
Кроме того, ваше решение не очень-то эффективное: вы заводите множество рабочих дней (за год это примерно 260 дней), потом делаете его копию в no_strikes (еще 260 элементов), потом из no_strikes вычеркиваете дни забастовок (допустим, 150 дней). Зачем все это? Дважды неоптимально: во-первых, можно было сразу запомнить длину множества work_days, и его копия не нужна, работайте с ним самим. Во-вторых, лучше вместо всего этого заведите множество забастовочных дней (длина 150) и вычеркните все выходные (множество длины 104).
Виктор, тут нечему удивляться, т.к. это решение скопировано из другой сайта, где оно было придумано разработчиками