Задача "Забастовки"

Условие

Политическая жизнь одной страны очень оживленная. В стране действует 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. Вам нужно определить число забастовок, произошедших в этой стране в течении года.

Решение

  1. N, K = [int(s) for s in input().split()]
  2. work_days = set([day for day in range(1, N + 1) if day % 7 not in (6, 0)])
  3. no_strikes = set(work_days)
  4. for party in range(K):
  5.     a, b = [int(s) for s in input().split()]
  6.     max_strikes = (N - a) // b + 1
  7.     no_strikes -= {a + b*i for i in range(max_strikes)}
  8. print(len(work_days) - len(no_strikes))