Ctrl K

Первое окно с нужным отпечатком

Сложная
Каждой строчной латинской букве сопоставлен вес: a — 1, b — 2, …, z — 26. Отпечаток строки w длины L при основании base и модуле mod равен (вес(w[0])·base⁰ + вес(w[1])·base¹ + ... + вес(w[L − 1])·base^(L − 1)) mod mod. Даны строка text и числа base, mod, length и fingerprint. Найдите самую левую подстроку text (непрерывный кусок) длины length, отпечаток которой равен fingerprint, и верните её. Гарантируется, что такая подстрока есть.
Пример 1
text='bad', base=10, mod=100, length=2, fingerprint=12 → 'ba'

Отпечаток «ba» = 2·1 + 1·10 = 12 — совпадает сразу. У «ad» он был бы 1 + 4·10 = 41.

Пример 2
text='zebra', base=5, mod=9, length=2, fingerprint=6 → 'ze'

«ze»: 26 + 5·5 = 51, 51 mod 9 = 6. У «eb» отпечаток тоже 6 (5 + 2·5 = 15), но «ze» левее.

Пример 3
text='hello', base=3, mod=10, length=3, fingerprint=3 → 'llo'

«hel»: 8 + 5·3 + 12·9 = 131 → 1; «ell»: 5 + 12·3 + 12·9 = 149 → 9; «llo»: 12 + 12·3 + 15·9 = 183 → 3.

Ограничения
  • 1 ≤ length ≤ text.length ≤ 2·10⁴
  • 1 ≤ base, mod < 2³¹
  • 0 ≤ fingerprint < mod
  • text состоит только из строчных латинских букв
  • Ответ всегда существует
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый длинный повтор СложнаяПовторяющиеся участки гена СредняяПалиндром дописыванием слева СложнаяЗеркальная нарезка строки СложнаяФрагменты-повторы Сложная
загружаем Python…
Вход
text='bad', base=10, mod=100, length=2, fingerprint=12
Ожидается
'ba'

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