Условие:
В любой платёжной системе ежедневно проходит довольно большое транзакций. Мошенники часто используют схему: с карты клиента быстро снимают небольшие суммы, чтобы не вызвать блокировку. Один из признаков мошенничества — много транзакций с одной карты за короткое время на разные счета.
Аналитик хочет выявлять подозрительные карты: за последние несколько минут (window) с карты должно быть совершено больше порога (threshold) уникальных получателей.
Вам нужно реализовать эффективную структуру данных, которая:
Добавляет транзакцию (время, номер карты, получатель).
Удаляет устаревшие транзакции (старше window минут).
Отвечает на запрос: подозрительная ли карта? (уникальных получателей > threshold за окно).
Ограничения:
Транзакции добавляются в реальном времени (временные метки могут быть не строго упорядочены, но чаще всего увеличиваются).
Запросы могут поступать в любой момент.
Нужно обрабатывать большое количество транзакций и запросов.
Реализуйте класс FraudDetector с методами:
\nadd_transaction(timestamp, card_number, recipient) – добавить транзакцию. timestamp – целое число (секунды или минуты), для простоты будем считать, что время монотонно возрастает, но допустимы небольшие отклонения (можно обрабатывать как угодно, но лучше использовать структуру, которая сама следит за порядком).
\nis_fraudulent(card_number, window, threshold) – вернуть True, если за последние window минут (включительно от current_time? лучше передавать current_time как параметр, чтобы имитировать реальное время) количество уникальных получателей по этой карте превышает threshold.

