Ctrl K

Сколько раз упомянули каждого

Средняя
В рабочем чате user_count участников с номерами от 0 до user_count - 1. Дан журнал событий log, каждое событие — тройка строк одного из двух видов: - ["MESSAGE", время, текст] — сообщение с упоминаниями. текст — это либо несколько токенов вида id<номер> через пробел (номера могут повторяться, упоминать можно и тех, кто сейчас отошёл), либо ALL — упоминание всех участников, либо HERE — упоминание всех, кто сейчас на месте. - ["OFFLINE", время, номер] — участник номер отходит ровно на 60 единиц времени: в момент время + 60 он автоматически снова на месте. Сначала все на месте. Журнал не обязательно упорядочен по времени. Если в один момент есть и смены статуса, и сообщения, статусы обновляются раньше, чем обрабатываются сообщения. Верните массив, где i-й элемент — сколько раз всего упомянули участника i. Каждое упоминание считается отдельно, даже если в одном сообщении номер встретился несколько раз.
Пример 1
user_count=3, log=[['MESSAGE', '5', 'id2 id2 id0'], ['OFFLINE', '7', '2'], ['MESSAGE', '30', 'HERE']] → [2, 1, 2]

В момент 5 участник 2 упомянут дважды, участник 0 — один раз. В момент 7 участник 2 уходит до момента 67, поэтому HERE в момент 30 достаётся только участникам 0 и 1.

Пример 2
user_count=2, log=[['OFFLINE', '40', '1'], ['MESSAGE', '100', 'HERE'], ['MESSAGE', '41', 'ALL']] → [2, 2]

События идут не по порядку времени. ALL в момент 41 задевает обоих, хотя участник 1 отошёл. В момент 100 участник 1 уже вернулся (в момент 40 + 60 = 100), и смены статуса обрабатываются раньше сообщений того же момента, так что HERE тоже достаётся обоим.

Пример 3
user_count=1, log=[['OFFLINE', '3', '0'], ['MESSAGE', '3', 'HERE'], ['MESSAGE', '3', 'id0']] → [1]

Участник 0 уходит в момент 3 раньше, чем обрабатываются сообщения этого момента, поэтому HERE его не задевает, а прямое упоминание засчитывается.

Ограничения
  • 1 ≤ user_count ≤ 100
  • 1 ≤ len(log) ≤ 100
  • log[i][0] — "MESSAGE" или "OFFLINE"
  • 1 ≤ время ≤ 10⁵
  • В сообщении с номерами от 1 до 100 токенов, каждый номер от 0 до user_count - 1
  • Событие OFFLINE приходит только для участника, который в этот момент на месте
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЗначения параболы по порядку СредняяЦепочка кратных СредняяВстретиться на одном значении СредняяСамые близкие показания часов СредняяПодтянуть или опустить Средняя
загружаем Python…
Вход
user_count=3, log=[['MESSAGE', '5', 'id2 id2 id0'], ['OFFLINE', '7', '2'], ['MESSAGE', '30', 'HERE']]
Ожидается
[2, 1, 2]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 70 тестов на сервере, включая скрытые.